如何在回收器视图中维护像Gmail应用程序一样的读取状态 项目单击?



当用户单击任何回收器视图项目时,我开发了一个应用程序,文本颜色应该会改变并且它工作正常,但是当我再次打开我的应用程序时,文本颜色不会保持不变,我使用共享首选项来保存sate,但它不起作用任何解决方案? 法典:

ItemClickSupport.addTo(recyclerView).setOnItemClickListener(
new ItemClickSupport.OnItemClickListener() {
@Override
public void onItemClicked(RecyclerView recyclerView, int position, View v) {
alarmDao = alarmDaos.get(position);
alarmDao.setRead(true);
alarmDaos.set(position, alarmDao);
alarmAdapter.notifyDataSetChanged();
Intent intent = new Intent(getContext(), NotificatinActivity.class);
startActivity(intent);
try {
SharedPreferences pref = getActivity().getSharedPreferences("MyPref", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean("isRad", alarmDao.isRead());
editor.putString("string", String.valueOf(alarmDao));
editor.apply();
} catch (Exception e) {
e.printStackTrace();
}
}
}
);

此值不应存储到 SharedPreferences 中,因为它是要显示的对象的一部分。

因为它是一个DAO,这意味着你在某个地方有一个数据库。因此,当用户选择项目时,您将更新isRead字段并更新数据库。

然后,当您想再次显示列表时,您只需检查isRead是真还是假,即可相应地显示项目的颜色。

您需要在回收器视图中检查共享首选项值 并在装订器中设置颜色。 即,在装订器中,如果单击设置所选颜色而不单击设置另一种颜色

共享优先级将不是一个很好的解决方案,因为所有位置状态都应该保存 单击或不单击。如果要使用共享首选项,请使其成为一组状态,以在其中定位和保存。

每个位置都需要状态数组或使用 sqllite

使用 SqLite 数据库,将项目列表保存在数据库中,并在 Table 中包含 ReadUnRead 列。 每当用户单击项目时,将读取未读设置为 1,并在回收器适配器 OnBindView 中,读取未读等于 1 的任何项目都会更改其颜色。

您需要创建一个database并为此创建一个Boolean变量,例如 true.false,并在此变量中设置一个值(如果单击它然后更改其值 true(。 或者另一种解决方案是您需要创建一个 shared preference并从中设置并获取一个值,但我建议您使用database.

最新更新