I'm working on adding an item via a button.
I used ListAdapter
and DiffUtil
.
However, when the button is pressed, the first item is updated, but the screen does not update after that.
I tried debugging
with Adapter
and DiffUtil
.
I checked whether the List
was submitted
well by using the currentList
in the Adapter, but the break point works only on the first item and does not stop for the items added after that.
In DiffUtil
, we confirmed that break point
does not work at all.
What code did I write wrong?
Fragment
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentWriteRoutine2Binding.inflate(inflater, container, false)
adapter = DetailAdapter()
binding.apply {
rv.adapter = adapter
rv.itemAnimator = null
header.add.setOnClickListener {
vm.addDetail()
}
header.delete.setOnClickListener {
vm.deleteDetail()
}
}
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
vm.items.observe(viewLifecycleOwner) { newList ->
adapter.submitList(newList)
}
}
RoutineItem
sealed class RoutineItem(
val id: String,
) {
class Header(
id: String = UUID.randomUUID().toString(),
val workout: String,
val unit: String,
) : RoutineItem(id)
class Detail(
id: String = UUID.randomUUID().toString(),
val set: Int,
var weight: String = "",
var reps: String = "",
) : RoutineItem(id)
}
Adapter
class DetailAdapter
: ListAdapter<RoutineItem, DetailAdapter.ViewHolder>(RoutineDiffCallback()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(
ItemRoutineDetailBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val cur = currentList
}
inner class ViewHolder(val binding: ItemRoutineDetailBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(item: RoutineItem.Detail) {
}
}
}
DiffUtilCallback
class DetailDiffCallback : DiffUtil.ItemCallback<RoutineItem>() {
override fun areItemsTheSame(
oldItem: RoutineItem,
newItem: RoutineItem
): Boolean = (oldItem.id == newItem.id)
override fun areContentsTheSame(
oldItem: RoutineItem,
newItem: RoutineItem
): Boolean = (oldItem == newItem)
}