我有一个活动,其中有一个空的textview
用户单击此textview
从位置列表中选择位置,因此当用户单击选择的位置textview
时,它将打开checkbox
的位置列表。
当用户选择位置(可以选择多个位置)并单击“完成”时,当用户单击相同的{{时,所有选中的textView
值都将显示在活动一个textview
上1}}添加更多位置,然后应在textview
列表中选中所有先前选中的项目。我没有选中所有先前的复选框。
我不知道如何实现这一目标。我需要选择所有旧的recylerview
,如果单击同一checkbox
,则用户可以选择更多新的复选框。请帮我得到这个。 Java代码对我也有帮助
下面是我的recylerView适配器代码:-
textview
答案 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)
只需在每个刻度线和取消标记上更新一个带有标志的模型类即可。选中此标志可以勾选和取消选中用于恢复复选框状态的逻辑。