我有一个类别列表,我想显示每个类别的项目数量。 在MVVM架构下使用Room基本上我想在我的适配器中使用简单的查询,返回它的值(项目的数量)
刀
@Query("SELECT COUNT(id) FROM items WHERE listId=:listID")
suspend fun countItems(listID: Long):Int
回购
suspend fun countItems(id: Long): Int{
return itemsDao.countItems(id)
}
适配器
class ListsAdapter internal constructor(
context: Context
) : RecyclerView.Adapter<ListsAdapter.ListViewHolder>() {
private val inflater: LayoutInflater = LayoutInflater.from(context)
private var lists = mutableListOf<ListItem>()
inner class ListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
val listName: TextView = itemView.findViewById(R.id.single_list_name)
val listIcon: ImageView = itemView.findViewById(R.id.single_list_icon)
val wAmount: TextView = itemView.findViewById(R.id.single_list_amount)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListsAdapter.ListViewHolder {
val itemView = inflater.inflate(R.layout.single_list, parent, false)
return ListViewHolder(itemView)
}
override fun getItemCount() = lists.size
override fun onBindViewHolder(holder: ListsAdapter.ListViewHolder, position: Int) {
val current = lists[position]
holder.listName.text = current.name
// holder.wAmount.text =
holder.itemView.setOnClickListener {
val bundle = bundleOf("list_id" to current.id,"list_name" to current.name)
holder.itemView.findNavController().navigate(R.id.action_listsFragment_to_nav_items_list, bundle)
}
}
internal fun setLists(lists: List<ListItem>) {
this.lists = lists.toMutableList()
notifyDataSetChanged()
}
internal fun listToDelete(viewHolder: RecyclerView.ViewHolder) : ListItem{
val position = viewHolder.adapterPosition
return lists[position]
}
internal fun removeList(viewHolder: RecyclerView.ViewHolder){
lists.removeAt(viewHolder.adapterPosition)
notifyItemRemoved(viewHolder.adapterPosition)
}
}
它是否应该在ViewModel上完成,但在这种情况下它必须传递给Adapter? 或者也许有更好(更干净)的方法来做这件事? 感谢任何帮助。 谢谢
适配器不应该负责从存储加载数据。 简单的方法是在ViewModel
中访问repo,然后将数据传递给适配器
。 这还为您提供了能够以简单的方式处理错误的好处,因为它将很容易更新包含adapter
的布局,而不像从适配器执行此操作所需的意大利面,当然还有一个错误的设计。
另一个步骤是引入一个更分层的体系结构,就像Uncle Bob的clean体系结构