Я разрабатываю одно приложение, когда пользователь щелкает любой элемент просмотра 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();
}
}
}
);




Вам нужно проверить значение sharedprefernce в адаптере recyclerview и установите цвет в биндхолдер. то есть в держателе привязки, если щелкнуть, установить выбранный цвет, а не щелкнуть, установить другой цвет
sharedprefrence не будет отличным решением, потому что все состояние позиции должно сохраняться при нажатии или нет. если вы хотите использовать sharedprefernce, сделайте его массивом состояний в соответствии с положением и сохраните в нем.
для каждой позиции нужен массив состояний или используйте sqllite
Используйте базу данных SqLite, сохраните список элементов в базе данных и включите столбец ReadUnRead в таблицу. всякий раз, когда пользователь щелкает элемент, установите для ReadUnRead значение 1, а в Recycler Adapter OnBindView любой элемент, для которого ReadUnRead равен 1, изменит свой цвет.
Это значение не следует сохранять в SharedPreferences, поскольку оно является частью объекта, который вы хотите отобразить.
Поскольку это DAO, это означает, что у вас где-то есть база данных. Поэтому, когда пользователь выбирает элемент, вы обновляете поле isRead и обновляете базу данных.
Затем, когда вы хотите снова отобразить список, вам просто нужно проверить, является ли isRead истинным или ложным, чтобы соответствующим образом отобразить цвет элемента.
Да, потому что вам нужно сохранить значение в базе данных. Все остальное хранится в памяти и теряется при закрытии приложения.
прямо сейчас я создаю локальный метод получения и установки с использованием логического значения, но я хочу постоянно изменять состояние, когда пользователь читает сообщение, оно всегда остается таким же.
Вы меняете состояние объекта, хранящегося в памяти. Что вам нужно сделать, так это обновить значение в базе данных (как я предполагал, вы получаете объект из базы данных)
Я, хотя достаточно, чтобы сохранить все значения в общих предпочтениях, иначе мы должны хранить все изменения в удаленной базе данных?
Откуда у вас список alarmDao?
Итак, что вы можете сделать, это установить идентификатор (жестко запрограммированный) в вашем объекте DAO и сохранить этот идентификатор в SharePreferences
у тебя есть твттер-идентификатор?
Нет, зачем тебе идентификатор в Твиттере?
я хочу подробно описать может быть вы не поняли должным образом
Тогда, возможно, тебе стоит просто обновить свой вопрос. Поскольку вы не одобрили никаких ответов, я полагаю, что никто этого не понял.
Вам нужно создать database и сделать для этого одну переменную Boolean, например true.false, и установить значение в этой переменной, если она была нажата, а затем изменила ее значение на true. или другое решение: вам нужно создать shared preference и установить и получить из него значение, но я рекомендовал вам использовать database.
когда я нахожусь в приложении, во время щелчка по элементу цвет изменился, но когда я закрываю приложение и открываю его снова, цвет включается, это выделено жирным шрифтом