如果用户通过单击同一按钮返回到活动,请保持RecylerView适配器复选框为选中状态[Kotlin]

时间:2019-02-18 06:14:30

标签: java android checkbox kotlin android-recyclerview

我有一个活动,其中有一个空的textview用户单击此textview从位置列表中选择位置,因此当用户单击选择的位置textview时,它将打开checkbox的位置列表。

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

我不知道如何实现这一目标。我需要选择所有旧的recylerview,如果单击同一checkbox,则用户可以选择更多新的复选框。请帮我得到这个。 Java代码对我也有帮助

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

textview

5 个答案:

答案 0 :(得分:2)

您需要使用其项目状态(是否选中)更新视图。

在适配器所在的活动/片段的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()        
}

答案 1 :(得分:1)

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

答案 2 :(得分:1)

在列表中,当选中复选框时,您确实会保留一个布尔字段,然后所选位置值为true,并通知数据,并且在onbind Viewholder内部,您首先检查哪个位置为true。如果为true,则显示选中的复选框,否则取消选择。

答案 3 :(得分:1)

当我使用某个应用程序时,我也遇到了同样的问题,并且我甚至需要关闭该复选框。因此,我使用 SharedPreferences 来存储和检索将指示复选框状态的值,然后我可以轻松地指定所有元素的状态。因此,如果您遇到相同的问题而又没有解决方案,则可以使用这种方式。

答案 4 :(得分:0)

只需在每个刻度线和取消标记上更新一个带有标志的模型类即可。选中此标志可以勾选和取消选中用于恢复复选框状态的逻辑。