Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果用户通过单击同一按钮[Kotlin]返回活动,请选中RecylerView适配器复选框_Java_Android_Checkbox_Kotlin_Android Recyclerview - Fatal编程技术网

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()        
}