Как получить выбранные элементы {список ранее выбранных элементов массива}, как проверено в android recyclerview {Всего элементов} - PullRequest
0 голосов
/ 25 февраля 2019

Я использую android recyclerview для отображения списка элементов, могу выбрать несколько элементов через интерфейс MultipleSelect, и мне нужно показать, что ранее выбранные / отмеченные элементы установлены так, как было проверено в режиме редактирования recyclerview.

Я не могу получить эту бизнес-логику в моем коде.Может кто-нибудь, пожалуйста, помогите мне, и я новичок в разработке для Android.

Я получаю предыдущие выбранные элементы с сервера в формате arrayList:

InterestsList : Ex:["Antiques-Collecting","Arts-Crafts","Boating"]

Этот элемент InterestsList необходимо установитькак отмечено / выбрано в Recyclerview, и снова пользователь может изменить элементы, которые нужно выбрать больше или удалить из ранее выбранных и сохранить данные.

как мне написать простую логику для этого?

strings ArrayList, содержащий данные списка элементов Recycler, InterestsList - данные списка проверенных элементов.

Адаптер Calss:

@Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.tvInterestName.setText(interests.get(position).getInterest().toString());

        interestList = model.getInterests();  // PREVIOUSLY SELECTED ITEMS

        //in some cases, it will prevent unwanted situations
        holder.checkBox.setOnCheckedChangeListener(null);

        //if true, your checkbox will be selected, else unselected
        holder.checkBox.setChecked(interests.get(position).isSelected());

        holder.cell.setOnClickListener(v ->
        {
            holder.checkBox.performClick();
        });

        if (interests.get(position).isSelected()) {
            holder.checkBox.setChecked(true);
        } else {
            holder.checkBox.setChecked(false);
        }

        holder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) ->
        {
            guestListener.OnMultipleGuestListener(position, isChecked);
        });

    }

Выбор нескольких элементов ниже Приемник интерфейса, используемый в моем классе активности:

 @Override
    public void OnMultipleGuestListener(int position, boolean isChecked) {
        interestFinalList.get(position).setSelected(isChecked);
        interestsAdapter.notifyDataSetChanged();
    }

ScreenShot для необходимых изменений в формате ниже:

Пример: ["Коллекционирование антиквариата", "Искусства-ремесла", "Прогулка на лодке"] Элементы должны быть установлены как отмеченные / выбранные, когда я придуна этот экран.

enter image description here

Ответы [ 3 ]

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

в вашем списке поддерживают булеву переменную, когда флажок снят, затем соответственно они изменяют значение булевой переменной как true и false и после этого уведомляют ваш список.

and inside your onbind view holder check boolean variable true or false if true then show selected otherwise unselected.
0 голосов
/ 25 февраля 2019

Измените свой код следующим образом.надеюсь, это поможет вам.

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    holder.tvInterestName.setText(interests.get(position).getInterest().toString());

    //in some cases, it will prevent unwanted situations
    holder.checkBox.setOnCheckedChangeListener(null);

    //if true, your checkbox will be selected, else unselected
    holder.checkBox.setChecked(interests.get(position).isSelected());

    holder.cell.setOnClickListener(v ->
    {
        holder.checkBox.performClick();
    });

    holder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) ->
    {
        interests.get(position).setSelected(isChecked);
        guestListener.OnMultipleGuestListener(position, isChecked);
    });

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

Получите один выбранный результат из вашей модели и отметьте, соответствует текстовое имя владельца или нет.Если оба равны, сделайте флажок истинным.Например:

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    holder.tvInterestName.setText(interests.get(position).getInterest().toString());

    //in some cases, it will prevent unwanted situations
    holder.checkBox.setOnCheckedChangeListener(null);

    //if true, your checkbox will be selected, else unselected
   for(int i=0;i<model.getInterests().size();i++)
   if(model.getInterests().get(i).equals(interests.get(position).getInterest())){
        holder.checkBox.setChecked(true);

    }
}
...