Java 如果用户通过单击同一按钮[Kotlin]返回活动,请选中RecylerView适配器复选框
我有一个活动,其中有一个空的Java 如果用户通过单击同一按钮[Kotlin]返回活动,请选中RecylerView适配器复选框,java,android,checkbox,kotlin,android-recyclerview,Java,Android,Checkbox,Kotlin,Android Recyclerview,我有一个活动,其中有一个空的textview用户点击此textview从位置列表中选择位置,因此当用户点击选择位置textview时,它将打开带有复选框的位置列表 用户选择位置时(可以选择多个位置)然后单击“完成”,则所有选定位置将显示在活动一上,此时所有选定位置都已选中。当用户单击相同的textView添加更多位置时,则在recylerview列表上,所有以前选中的项目都应被选中。我没有选中所有以前选中的复选框 我不知道怎样才能做到这一点。我需要选中所有旧的复选框,如果单击相同的文本视图,用户
textview
用户点击此textview
从位置列表中选择位置,因此当用户点击选择位置textview
时,它将打开带有复选框的位置列表
用户选择位置时(可以选择多个位置)然后单击“完成”,则所有选定位置将显示在活动一上,此时所有选定位置都已选中。当用户单击相同的textView
添加更多位置时,则在recylerview
列表上,所有以前选中的项目都应被选中。我没有选中所有以前选中的复选框
我不知道怎样才能做到这一点。我需要选中所有旧的复选框
,如果单击相同的文本视图
,用户可以选择更多的新复选框。请帮我拿这个。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
}
}
class SelectMedicineAdapter(val-medicineList:ArrayList,val-context:context):RecyclerView.Adapter(){
var selectedCheckBoxMedicineList:ArrayList=ArrayList()
覆盖onBindViewHolder(holder:RecyclerView.ViewHolder,位置:Int){
holder.itemView.textViewSelectMedicineName.text=medicineList.get(位置)
holder.itemView.CheckBox SelectMedicine.setOnCheckedChangeListener{按钮视图,已选中->
val itemText=medicineList.get(位置)
如果(已检查){
selectedCheckBoxMedicineList.add(项目文本)
}否则{
selectedCheckBoxMedicineList.remove(项目文本)
}
}
}
fun getSelectedMedicineList():ArrayList{
返回selectedCheckBoxMedicineList
}
重写getItemCount():Int{
返回medicineList.size
}
覆盖onCreateViewHolder(holder:ViewGroup,p1:Int):RecyclerView.ViewHolder{
val v=(LayoutFlater.from(上下文)。充气(R.layout.row\u select\u medicine\u适配器,支架,false))
返回视窗支架(v)
}
类ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
var textViewSelectMedicineName=itemView.textViewSelectMedicineName
var imageViewPlusButton=itemView.imageViewPlusButton
var imageViewMinusButton=itemView.imageViewMinusButton
var checkboxSelectMedicine=itemView.checkboxSelectMedicine
}
}
您需要使用视图的项目状态(已选择或未选择)更新视图
在适配器所在的活动/片段的onSaveInstanceState中,您应该将适配器状态(已选择的项目(getSelectedMedicineList
)写入捆绑包
每当您的片段/活动被还原时,只需使用您保存的数据更新适配器restoreSelectedMedicineList(selectedCheckBoxMedicineList:ArrayList)
覆盖BindViewHolder(holder:RecyclerView.ViewHolder,位置:Int){
holder.itemView.textViewSelectMedicineName.text=medicineList.get(位置)
holder.itemView.CheckBox SelectMedicine.setOnCheckedChangeListener(空)
如果(选中复选框MedicineList.contains(itemText)){
holder.itemView.setChecked(true)
}否则{
holder.itemView.setChecked(false)
}
holder.itemView.CheckBox SelectMedicine.setOnCheckedChangeListener{按钮视图,已选中->
val itemText=medicineList.get(位置)
如果(已检查){
selectedCheckBoxMedicineList.add(项目文本)
}否则{
selectedCheckBoxMedicineList.remove(项目文本)
}
}
}
乐趣恢复选定的药物列表(选定的复选框药物列表:ArrayList){
this.selectedCheckBoxMedicineList=selectedCheckBoxMedicineList
notifyDataSetionValidated()
}
您需要使用视图的项目状态(已选择或未选择)更新视图
在适配器所在的活动/片段的onSaveInstanceState中,您应该将适配器状态(已选择的项目(getSelectedMedicineList
)写入捆绑包
每当您的片段/活动被还原时,只需使用您保存的数据更新适配器restoreSelectedMedicineList(selectedCheckBoxMedicineList:ArrayList)
覆盖BindViewHolder(holder:RecyclerView.ViewHolder,位置:Int){
holder.itemView.textViewSelectMedicineName.text=medicineList.get(位置)
holder.itemView.CheckBox SelectMedicine.setOnCheckedChangeListener(空)
如果(选中复选框MedicineList.contains(itemText)){
holder.itemView.setChecked(true)
}否则{
holder.itemView.setChecked(false)
}
holder.itemView.CheckBox SelectMedicine.setOnCheckedChangeListener{按钮视图,已选中->
val itemText=medicineList.get(位置)
如果(已检查){
selectedCheckBoxMedicineList.add(项目文本)
}否则{
selectedCheckBoxMedicineList.remove(项目文本)
}
}
}
乐趣恢复选定的药物列表(选定的复选框药物列表:ArrayList){
this.selectedCheckBoxMedicineList=selectedCheckBoxMedicineList
notifyDataSetionValidated()
}
当您启动活动时,它不知道数据的状态。您需要提供活动的状态
我的意思是,当用户选择他/她的所需位置并返回到活动一时,您需要保留这些所选位置;当用户再次想要更新位置时,您需要将这些先前选择的位置传递到第二个活动,然后更新回收视图相应地支持数据。当您启动活动时,它不知道数据的状态。您需要提供代码的状态
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()
}