如何扩展recyclerview?

enxuqcxy  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(364)

我试图用SelectionEnable元素制作一个列表。我可以点击按钮,它选择元素,但它也会定期选择列表中的其他元素。我注意到,例如,当我选择第一个元素时,所有十个元素都被选中。这对我来说显然是个问题。。。你能帮我吗?这是我的活动

  1. val transactionChooser = supportFragmentManager.beginTransaction()
  2. transactionChooser.replace(R.id.container_lowerLegs, ChooserLowerLegs(this))
  3. transactionChooser.addToBackStack(null)
  4. transactionChooser.commit()

这是我的适配器

  1. class SelectionAdapter(
  2. val context: MyActivity1,
  3. private val chooserList: ArrayList<ChooserModel>)
  4. : RecyclerView.Adapter<SelectionAdapter.ViewHolder>(){
  5. //boite pour ranger les composants à contrôler
  6. class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
  7. val exerciceImage: ImageView = view.findViewById(R.id.image_selection)
  8. val likedIcon: ImageView = view.findViewById(R.id.button_liked)
  9. }
  10. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
  11. val view = LayoutInflater.from(parent.context)
  12. .inflate(R.layout.item_selection, parent, false)
  13. return ViewHolder(view)
  14. }
  15. override fun onBindViewHolder(holder: ViewHolder, position: Int) {
  16. // récupérer les infos du muscle group
  17. val currentItem = chooserList[position]
  18. //vérifier si item liked
  19. fun updateStar() {
  20. if (currentItem.liked) {
  21. holder.likedIcon.setImageResource(R.drawable.ic_check_foreground)
  22. } else {
  23. holder.likedIcon.setImageResource(R.drawable.ic_add_foreground)
  24. }
  25. }
  26. //mettre à jour les infos du muscle group
  27. holder.exerciceImage.setImageResource(currentItem.drawable)
  28. holder.likedIcon.setOnClickListener {
  29. currentItem.liked = !currentItem.liked
  30. updateStar()
  31. }
  32. }
  33. override fun getItemCount(): Int = chooserList.size
  34. }

最后是我的片段:

  1. open class ChooserLowerLegs(
  2. private val context: MyActivity1
  3. ) : Fragment() {
  4. override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
  5. savedInstanceState: Bundle?): View? {
  6. val view = inflater.inflate(R.layout.grid_list_item, container, false)
  7. val chooserList = arrayListOf<ChooserModel>()
  8. chooserList.add(
  9. ChooserModel(
  10. R.string.home_page_first_button,
  11. R.string.first_picture,
  12. R.drawable.bas_des_jambes_1,
  13. false
  14. )
  15. )
  16. chooserList.add(
  17. ChooserModel(
  18. R.string.home_page_first_button,
  19. R.string.second_picture,
  20. R.drawable.bas_des_jambes_3,
  21. false
  22. )
  23. )
  24. chooserList.add(
  25. ChooserModel(
  26. R.string.home_page_first_button,
  27. R.string.third_picture,
  28. R.drawable.bas_des_jambes_5,
  29. false
  30. )
  31. )
  32. // récupérer le recyclerview
  33. val verticalRecyclerView = view.findViewById<RecyclerView>(R.id.Vertical_recycler_view_grid)
  34. verticalRecyclerView.adapter = SelectionAdapter(context, chooserList)
  35. verticalRecyclerView.addItemDecoration(MuscleItemDecoration())
  36. return view
  37. }
  38. }

此外,我想在网格中显示我的项目,而不是在线性视图中,但我不知道如何做到这一点?

hwazgwia

hwazgwia1#

您必须将布局管理器设置为回收视图,
要设置具有2列的gridlayout,请执行以下操作:

  1. val layoutManager = GridLayoutManager(mContext, 2)
  2. val mAdapter = YourAdapter(context = activity!!,list = list)
  3. recyclerView.layoutManager = layoutManager
  4. recyclerView.adapter = mAdapter

现在,从列表中的10条记录中选择一条。在模型类中获取一个布尔变量,并将其传递到适配器类中。单击recycleview的项时,使用for循环将另一个项布尔变量设置为false,并将要显示的项设置为选中项,在for循环完成后将其设置为true。最后,使用您在模型类中使用的布尔变量在适配器类中显示一些标记为选定的写代码:
例如:recycleview项的侦听器

  1. mAdapter.clickListener{ pos, model ->
  2. var entity = model as YourModel
  3. list.forEach {
  4. model.isSelected = false
  5. }
  6. list[i].isSelected = true
  7. mAdapter.notifyDataSetChanged()
  8. }
展开查看全部

相关问题