Оставьте флажок «Адаптер RecylerView» установленным, если пользователь вернется к активности, нажав на ту же кнопку [Kotlin] - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть первый вид деятельности, когда у пустого textview пользователя есть щелчок по этому textview, чтобы выбрать местоположение из списка местоположений, поэтому для того, чтобы пользователь щелкнул по выбору местоположения textview, он откроет список местоположений с помощью * 1004.*.

Когда пользователь выбирает местоположение (может выбрать несколько местоположений) и нажимает «Готово», все выбранные местоположения будут отображаться на активности один 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 ]

0 голосов
/ 18 февраля 2019

Просто обновите класс модели с флажком на каждом тике и снимите галочку.Установите этот флажок, чтобы отмечать и снимать флажок для восстановления состояния флажка.

0 голосов
/ 18 февраля 2019

Когда я работаю с приложением, я столкнулся с той же проблемой, а также мне нужно, чтобы флажки устанавливались даже при закрытии приложения.Поэтому я использовал SharedPreferences для хранения и извлечения значений, которые будут указывать состояния флажков, а затем я могу легко указать состояния всех элементов.Поэтому, если вы столкнулись с той же проблемой и не имеете решения, вы можете использовать этот способ.

0 голосов
/ 18 февраля 2019

Когда вы запускаете Activity, он не знает, в каком состоянии находятся ваши данные.Вам необходимо указать состояние для Activity.
. Под этим я подразумеваю, когда пользователь выбирает свои желаемые местоположения и возвращается к Activity One, вам необходимо удерживать эти выбранные местоположения, и когда пользователь снова захочетчтобы обновить местоположения, вам необходимо передать эти ранее выбранные местоположения второму Activity, а затем обновить RecyclerView вспомогательных данных соответственно.

0 голосов
/ 18 февраля 2019

в вашем списке вы сохраняете логическое поле, когда флажок установлен, затем выбранное значение позиции равно true, и уведомляете данные, и в окне просмотра onbind вы сначала проверяете, какая позиция является истинной.если true, то показывать выбранный флажок, в противном случае отменить выбор.

0 голосов
/ 18 февраля 2019

Вам необходимо обновить представления с состоянием их элементов (выбрано или нет).

В 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()        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...