无法记住列表视图中切换按钮的状态

时间:2019-01-21 06:22:31

标签: android android-studio

每当我按下切换按钮时,我都想记住列表视图中切换按钮的状态。

我尝试使用共享的首选项来记住基于项目位置的切换按钮状态,但是它不起作用。但是我认为这样做存在问题,就好像我从列表视图中删除一项时,位置可能会更改。

// 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 :(得分:0)

我认为您的方法是错误的,您应该创建另一个ArrayList,在其中将所有单击的按钮位置存储在listview中。并且,在onBindViewHolder方法中,您必须检查ArrayList是否包含特定位置,如果是,则设置按钮状态为按下还是未按下。

希望有帮助!

答案 1 :(得分:0)

将模型列表传递到列表视图,该模型将包含值和选中的标记

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

   // set your getter and setter here 
}

在列表视图的viewHolder中检查item.isChecked为true时是否启用切换,否则将当前位置的Checked set设置为true时为false;否则,如果要更好地保存列表状态以使用数据库,则设置false可能是Room或ObjectBox,因为sharedPrefernce仅使用一个值