Kotlinベース#8 RecycleViewとAdapter
1. Recycle View
振り返ってみましょう.
まず、RecycleViewに入れるitem-Layoutを作成します.
RecycleViewはitem-Layoutのリストです.
//일단 넣을 배열을 생성한다. 여기선 단순하게 만들었지만
fun loadData(): MutableList<Memo> {
val memoList = mutableListOf<Memo>()
for (no in 1..100) {
val title = "이것이 안드로이드? $no"
val date = System.currentTimeMillis()
val memo = Memo(no, title, date)
memoList.add(memo)
}
return memoList
}
今フレームを入れましょう //1. 데이터를 불러온다.
val data = loadData()
//2. 아다터를 생성
val customAdapter = CustomAdapter(data)
//3. 화면의 RecyclerView와 연결
binding.recyclerView.adapter = customAdapter
//4. 레이아웃 매니저 설정
binding.recyclerView.layoutManager = LinearLayoutManager(this)
Adapterが設置され、メインの作業は終了しました.2. Adapter
文は内部クラスとして宣言したり、外部に除外してモジュール化したりできます.
何が正しいのか分かりませんが、メンテナンスの面ではモジュール化が便利ではありませんか?
class CustomAdapter(val listData: MutableList<Memo>) :
RecyclerView.Adapter<CustomAdapter.Holder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val binding = ItemRecycleBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return Holder(binding)
}
override fun getItemCount() = listData.size
override fun onBindViewHolder(holder: Holder, position: Int) {
// 1. 사용할 데이터를 꺼낸다.
val memo = listData.get(position)
// 2. 폴더에 데이터를 전달한다.
holder.setMemo(memo)
}
//1. 홀더를 먼저 생성한다.
class Holder(val binding: ItemRecycleBinding) : RecyclerView.ViewHolder(binding.root) {
lateinit var currentMemo: Memo
// 클릭처리는 init에서만 한다.
init {
binding.root.setOnClickListener {
val title = binding.TextTitle.text
Toast.makeText(
binding.root.context,
"클릭된 아이템 : ${currentMemo.title}",
Toast.LENGTH_LONG
).show()
}
}
//3. 받은 데이터를 화면에 출력한다.
fun setMemo(memo: Memo) {
currentMemo = memo
with(binding) {
TextNo.text = "${memo.no}"
TextTitle.text = "${memo.title}"
val sdf = SimpleDateFormat("yyyy-MM-dd")
val formattedDate = sdf.format(memo.timestamp)
TextDate.text = "${formattedDate}"
}
}
}
よく見ると... //1. 홀더를 먼저 생성한다.
class Holder(val binding: ItemRecycleBinding) : RecyclerView.ViewHolder(binding.root) {
//Recycle이기 때문에 bind로 호출하면 값이 꼬일수도 있다.
lateinit var currentMemo: Memo
// 클릭처리는 init에서만 한다.
init {
binding.root.setOnClickListener {
val title = binding.TextTitle.text
Toast.makeText(
binding.root.context,
"클릭된 아이템 : ${currentMemo.title}",
Toast.LENGTH_LONG
).show()
}
//Memo를 세팅해주는 역할이다. 값을 매핑해준다.
fun setMemo(memo: Memo) {
currentMemo = memo
with(binding) {
TextNo.text = "${memo.no}"
TextTitle.text = "${memo.title}"
val sdf = SimpleDateFormat("yyyy-MM-dd")
val formattedDate = sdf.format(memo.timestamp)
TextDate.text = "${formattedDate}"
}
}
次にOverrideを入力します. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
// 일반적으로 이렇게 쓰인다. 모듈화때만 ViewType을 통해 변경되는것이 있다.
val binding = ItemRecycleBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return Holder(binding)
}
override fun getItemCount() = listData.size
override fun onBindViewHolder(holder: Holder, position: Int) {
// 1. 사용할 데이터를 꺼낸다.
val memo = listData.get(position)
// 2. 홀더에 데이터를 전달한다.
holder.setMemo(memo)
}
モジュール化されたAdapterは後で話します.Reference
この問題について(Kotlinベース#8 RecycleViewとAdapter), 我々は、より多くの情報をここで見つけました https://velog.io/@vov3616/Kotlin-기초8-RecycleView와-Adapterテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol