有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如果用户通过单击同一按钮[Kotlin]返回活动,则选中java Keep RecylerView adapter复选框

我有一个活动,其中有一个空的textview用户点击这个textview从位置列表中选择位置,这样当用户点击选择位置textview时,它会打开带有checkbox的位置列表

当用户选择位置(可以选择多个位置)并单击“完成”时,所有选择的位置都将显示在活动一上textView带有所有选中的textview值。现在,当用户单击相同的textview以添加更多位置,然后在recylerview列表上,所有之前选中的项目都应该被选中。我没有选中之前所有的复选框

我不知道如何做到这一点。我需要所有旧的checkbox都应该被选中,如果点击相同的textview,用户可以选择一些新的复选框。请帮我拿这个。Java代码对我也有帮助

下面是我的recylerView适配器代码:-

    class SelectMedicineAdapter (val medicineList : ArrayList<String>, val context: Context) : RecyclerView.Adapter<RecyclerView.ViewHolder>()  {
    var selectedCheckBoxMedicineList : ArrayList<String> = ArrayList()

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {

        holder.itemView.textViewSelectMedicineName.text = medicineList.get(position)

        holder.itemView.checkboxSelectMedicine.setOnCheckedChangeListener { buttonView, isChecked ->
            val itemText = medicineList.get(position)

            if (isChecked) {
                selectedCheckBoxMedicineList.add(itemText)

            } else {
                selectedCheckBoxMedicineList.remove(itemText)
            }


        }
    }

    fun getSelectedMedicineList(): ArrayList<String> {
        return selectedCheckBoxMedicineList
    }

    override fun getItemCount(): Int {

        return medicineList.size
    }

    override fun onCreateViewHolder(holder: ViewGroup, p1: Int): RecyclerView.ViewHolder {

        val v= (LayoutInflater.from(context).inflate(R.layout.row_select_medicine_adapter,holder,false))
        return ViewHolder(v)
    }

    class ViewHolder (itemView: View): RecyclerView.ViewHolder(itemView){

        var textViewSelectMedicineName = itemView.textViewSelectMedicineName
        var imageViewPlusButton = itemView.imageViewPlusButton
        var imageViewMinusButton = itemView.imageViewMinusButton
        var checkboxSelectMedicine = itemView.checkboxSelectMedicine

    }


}

共 (5) 个答案

  1. # 1 楼答案

    当我在使用一个应用程序时,我也遇到了同样的问题,而且即使应用程序关闭,我也需要复选框。因此,我使用SharedReferences来存储和检索指示复选框状态的值,这样我就可以轻松地指定所有元素的状态。所以,如果你面临同样的问题,没有解决方案,你可以用这种方式

  2. # 2 楼答案

    启动Activity时,它不知道数据的状态。您需要提供Activity的状态
    我的意思是,当用户选择他/她想要的位置并返回到Activity One时,您需要保留这些选择的位置,当用户再次想要更新位置时,您需要将这些先前选择的位置传递到第二个Activity,然后相应地更新RecyclerView支持数据

  3. # 3 楼答案

    您需要使用视图的项目状态(选择或不选择)更新视图

    在适配器所在的活动/片段的onSaveInstanceState中,您应该将适配器状态(选择了哪些项(getSelectedMedicineList))写入捆绑包

    每当你的片段/活动被恢复时,只要用你保存的数据更新适配器restoreSelectedMedicineList(selectedCheckBoxMedicineList: ArrayList<String>)

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    
        holder.itemView.textViewSelectMedicineName.text = medicineList.get(position)
    
        holder.itemView.checkboxSelectMedicine.setOnCheckedChangeListener(null)
        if(selectedCheckBoxMedicineList.contains(itemText)) {
            holder.itemView.setChecked(true)
        } else {
            holder.itemView.setChecked(false)
        }
    
        holder.itemView.checkboxSelectMedicine.setOnCheckedChangeListener { buttonView, isChecked ->
                val itemText = medicineList.get(position)
    
    
    
            if (isChecked) {
                selectedCheckBoxMedicineList.add(itemText)
    
            } else {
                selectedCheckBoxMedicineList.remove(itemText)
            }
    
    
        }
    }
    
    fun restoreSelectedMedicineList(selectedCheckBoxMedicineList: ArrayList<String>) {
        this.selectedCheckBoxMedicineList = selectedCheckBoxMedicineList
        notifyDataSetInvalidated()        
    }
    
  4. # 4 楼答案

    只需在每个勾选和取消勾选上用一个标志更新模型类。选中此标志以勾选并取消勾选逻辑以恢复复选框状态

  5. # 5 楼答案

    在您的列表中,当选中复选框时,您会维护一个布尔字段,然后选定的位置值为真,并通知数据,在onbind viewholder中,您首先检查哪个位置为真。如果为true,则显示选中复选框,否则取消选中