【问题标题】:RecyclerView kotlin don't remember selected items, after add next itemsRecyclerView kotlin 不记得选中的项目,添加下一个项目后
【发布时间】:2020-08-31 04:05:43
【问题描述】:

您好,我的购物清单有问题。我有 RoomDatabase 和回收站视图来添加和阅读我的列表。当用户单击按钮行更改背景时,我会创建操作,但是在添加新项目后,看不到所选项目。哪里出了问题?

我的适配器:

lass ListAdapter() : RecyclerView.Adapter<ListAdapter.MyViewHolder>() {
private var itemList = emptyList<Items>()
lateinit var viewModel: ItemsViewModel

inner class MyViewHolder(itemview: View) : RecyclerView.ViewHolder(itemview) {

}


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
    return MyViewHolder(
        LayoutInflater.from(parent.context).inflate(R.layout.items_row, parent, false)
    )
}

override fun getItemCount(): Int {
    return itemList.size
}

override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    val currentItem = itemList[position]
    holder.itemView.name_rec.text = currentItem.itemsName
    holder.itemView.amount_rec.text = currentItem.amountItems.toString()




    holder.itemView.rowLayout.setOnClickListener {
        val action = ListFragmentDirections.actionListFragmentToUpdateFragment(currentItem)
        holder.itemView.findNavController().navigate(action)
    }

    holder.itemView.btnDeleteee.setOnClickListener {
        val action = ListFragmentDirections.actionListFragmentToDeleteFragment(currentItem)
        holder.itemView.findNavController().navigate(action)
    }


    holder.itemView.btncheckbox.setOnClickListener {

   holder.itemView.rowLayout.setBackgroundColor(Color.parseColor("#FFBA5F"))
    }







}


fun setData(items: List<Items>) {
    this.itemList = items
    notifyDataSetChanged()
}

我的 ListFragment:

class ListFragment : Fragment() {

lateinit var itemsViewModel: ItemsViewModel
private val args by navArgs<UpdateFragmentArgs>()


override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    val view = inflater.inflate(R.layout.fragment_list, container, false)


    //menu
    setHasOptionsMenu(true)



    //RecyclerView
    val recyclerView = view.recycler_view_list
    val adapter = ListAdapter()
    recyclerView.adapter = adapter
    recyclerView.layoutManager = LinearLayoutManager(requireContext())
    //ViewWModel
    itemsViewModel = ViewModelProvider(this).get(ItemsViewModel::class.java)
    itemsViewModel.readAllData.observe(viewLifecycleOwner, Observer { items ->
        adapter.setData(items)
    })




    view.floatingActionButton2.setOnClickListener {
        findNavController().navigate(R.id.action_listFragment_to_addFragment)
    }

在列表中保存所有对用户执行的操作有什么问题? 感谢您的帮助

【问题讨论】:

    标签: android kotlin android-recyclerview


    【解决方案1】:

    您必须存储所选项目,并且在onBindViewHolder 中您必须检查该位置的项目是否是先前选择的项目。如果这是所选项目,则更改背景或默认设置。

    实际上问题在于您正在更改 onClickListener 中的背景,因此当您使用 setData(items: List&lt;Items&gt;) 方法更新 itemList 时,RecyclerView 会重新加载所有可见项目并且您之前选择的项目会丢失其背景

    【讨论】:

    • 感谢您的回答和提示。我尝试解决我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2023-01-30
    相关资源
    最近更新 更多