Не могу вспомнить состояние переключателя в просмотре списка - PullRequest
0 голосов
/ 21 января 2019

Я хочу запомнить состояние кнопки переключения в просмотре списка всякий раз, когда я нажимал кнопку переключения.

Я пытался использовать общие настройки, чтобы запомнить состояние кнопки переключения на основе позиции элемента, но это не сработало. Однако я думаю, что проблема заключается в том, что, если я удаляю один из элементов из списка, позиция может измениться.

// getting the toggle button state using shared preference
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
Boolean runstopChecked = sharedPreferences.getBoolean("pref_runstop", false);
viewHolder.tbtnJobRunStop.setChecked(runstopChecked);

// Saving the position and toggle button state
viewHolder.tbtnJobRunStop.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putInt("pref_runstopposition", position);
                if(isChecked) 
                {
                    runJobId = dataModel.getJobId();
                    editor.putBoolean("pref_runstop", true);
                    editor.apply();
                    Intent statusIntent = new Intent(getContext(), RefreshJobService.class);
                    statusIntent.putExtra("id", runJobId);
                    getContext().startService(statusIntent);
                } else 
                {
                    stopJobId = dataModel.getJobId();
                    editor.putBoolean("pref_runstop", false);
                    editor.apply();
                    stopJob stopjob = new stopJob();
                    stopjob.execute();
                    Intent i = new Intent("stopjob");
                    LocalBroadcastManager.getInstance(getContext()).sendBroadcast(i);
                    i.putExtra("stopJobId",stopJobId);
                    getContext().sendBroadcast(i);
                }
            }
        });


Ответы [ 2 ]

0 голосов
/ 21 января 2019

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

    public class MyPojo{
    private String myValue="";
    private boolean isChecked = false;

   // set your getter and setter here 
}

в вашем viewHolder вашего списка просмотра проверьте, если item.isChecked true делает переключение на else false, если установленный переключатель имеет значение isChecked для текущей позиции как true, иначе устанавливает false, если вы хотите сохранить статус вашего списка, лучше использовать DB может быть Room или ObjectBox, потому что sharedPrefernce использует только одно значение

0 голосов
/ 21 января 2019

Я думаю, что ваш подход неверен, вы должны создать еще один ArrayList, в котором вы будете хранить все позиции нажатых кнопок в просмотре списка.И в методе onBindViewHolder вы должны проверить, содержит ли ArrayList определенную позицию, если да, установить состояние кнопки нажатой или не нажатой.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...