每当我按下切换按钮时,我都想记住列表视图中切换按钮的状态。
我尝试使用共享的首选项来记住基于项目位置的切换按钮状态,但是它不起作用。但是我认为这样做存在问题,就好像我从列表视图中删除一项时,位置可能会更改。
// 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);
}
}
});
答案 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仅使用一个值