코드를 좀 더 간결하게 하고싶어 apply, run , with 등과같은 함수를 사용하려는데
셋다 정상동작하니 어떠한것이 올바른지 잘모르겠습니다.
어떤게 옳은가요?
오리지널 기존 코드
@SuppressLint("NotifyDataSetChanged")
override fun onBindViewHolder(holder: ParentViewHolder, position: Int) {
holder.title.text = items[position].title + " $position"
holder.nestedRV.apply {
layoutManager = GridLayoutManager(
holder.nestedRV.context,
5
)
adapter = ChildAdapter(items[position].child)
setRecycledViewPool(viewPool)
}
holder.nestedRV.visibility = if(items[position].isExpanded) View.VISIBLE else View.GONE
holder.borderline.visibility = if(items[position].isExpanded) View.VISIBLE else View.GONE
holder.expanded.setOnClickListener {
items[position].isExpanded = !items[position].isExpanded
notifyDataSetChanged() // 여기에 사용하는 것이 맞나?
}
}
apply 사용해서 정리했을때.
@SuppressLint("NotifyDataSetChanged")
override fun onBindViewHolder(holder: ParentViewHolder, position: Int) {
holder.title.text = items[position].title + " $position"
// holder.nestedRV.apply {
// layoutManager = GridLayoutManager(
// holder.nestedRV.context,
// 5
// )
// adapter = ChildAdapter(items[position].child)
// setRecycledViewPool(viewPool)
// }
holder.apply {
nestedRV.apply {
layoutManager = GridLayoutManager(
holder.nestedRV.context,
5
)
adapter = ChildAdapter(items[position].child)
setRecycledViewPool(viewPool)
}
nestedRV.visibility = if(items[position].isExpanded) View.VISIBLE else View.GONE
borderline.visibility = if(items[position].isExpanded) View.VISIBLE else View.GONE
items[position].apply {
nestedRV.visibility = if(isExpanded) View.VISIBLE else View.GONE
borderline.visibility = if(isExpanded) View.VISIBLE else View.GONE
expanded.setOnClickListener {
isExpanded = !isExpanded
notifyDataSetChanged()
}
}
}
}
run 사용1
@SuppressLint("NotifyDataSetChanged")
override fun onBindViewHolder(holder: ParentViewHolder, position: Int) {
holder.title.text = items[position].title + " $position"
// holder.nestedRV.run {
// layoutManager = GridLayoutManager(
// holder.nestedRV.context,
// 5
// )
// adapter = ChildAdapter(items[position].child)
// setRecycledViewPool(viewPool)
// }
holder.run {
items[position].run {
nestedRV.layoutManager = GridLayoutManager(
holder.nestedRV.context,
5
)
nestedRV.adapter = ChildAdapter(items[position].child)
nestedRV.setRecycledViewPool(viewPool)
nestedRV.visibility = if(isExpanded) View.VISIBLE else View.GONE
borderline.visibility = if(isExpanded) View.VISIBLE else View.GONE
expanded.setOnClickListener {
isExpanded = !isExpanded
notifyDataSetChanged()
}
}
}
}
run 사용2
@SuppressLint("NotifyDataSetChanged")
override fun onBindViewHolder(holder: ParentViewHolder, position: Int) {
holder.title.text = items[position].title + " $position"
holder.run {
nestedRV.apply {
layoutManager = LinearLayoutManager(
holder.nestedRV.context,
LinearLayoutManager.VERTICAL,
false
)
adapter = ChildAdapter(items[position].child)
setRecycledViewPool(viewPool)
}
items[position].run {
nestedRV.visibility = if(isExpanded) View.VISIBLE else View.GONE
borderline.visibility = if(isExpanded) View.VISIBLE else View.GONE
expanded.setOnClickListener {
isExpanded = !isExpanded
notifyDataSetChanged()
}
}
}
}
with 사용
@SuppressLint("NotifyDataSetChanged")
override fun onBindViewHolder(holder: ParentViewHolder, position: Int) {
holder.title.text = items[position].title + " $position"
with(holder) {
nestedRV.layoutManager = GridLayoutManager(
nestedRV.context,
5
)
nestedRV.adapter = ChildAdapter(items[position].child)
nestedRV.setRecycledViewPool(viewPool)
with(items[position]) {
nestedRV.visibility = if(isExpanded) View.VISIBLE else View.GONE
expanded.setOnClickListener {
isExpanded = !isExpanded
notifyDataSetChanged()
}
}
}
}