当用户单击任何recyclerview视图项目时,我将开发一个应用程序,文本颜色应更改并且可以正常工作,但是当我再次打开我的应用程序时,文本颜色仍保持不变,我使用共享首选项保存状态,但它不起作用解? 代码:
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();
}
}
}
);
答案 0 :(得分:0)
您需要在recyclerview适配器中检查sharedprefernce值 并在bindholder中设置颜色。 即,在bindholder中,如果单击设置了所选颜色而没有单击设置了另一种颜色
sharedprefrence并不是一个好的解决方案,因为所有位置状态都应单击保存或不保存。如果要使用sharedprefernce,请将其设置为可定位并保存在其中的状态数组。
每个位置都需要状态数组或使用sqllite
答案 1 :(得分:0)
使用SqLite数据库,在数据库中保存项目列表,并在表中包括ReadUnRead列。每当用户单击将ReadUnRead设置为1的项目,并在Recycler Adapter OnBindView中单击时,任何将ReadUnRead等于1的项目都会更改其颜色。
答案 2 :(得分:0)
此值不应存储在SharedPreferences中,因为它是要显示的对象的一部分。
由于它是DAO,这意味着您在某个地方有一个数据库。因此,当用户选择项目时,您将更新isRead
字段并更新数据库。
然后,当您想再次显示列表时,只需检查isRead
是对还是假就可以相应地显示项目的颜色。
答案 3 :(得分:0)
您需要创建一个database
并为其创建一个像true.false这样的Boolean
变量,并在该变量中设置一个值(如果单击该值,然后将其更改为true)。或其他解决方案是您需要创建一个s hared preference
并从中设置并获取一个值,但我建议您使用database
。