Как поддерживать состояние чтения, такое как приложение gmail, при нажатии элемента просмотра ресайклера?

Я разрабатываю одно приложение, когда пользователь щелкает любой элемент просмотра 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();
                }
            }
        }
);
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
238
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вам нужно проверить значение sharedprefernce в адаптере recyclerview и установите цвет в биндхолдер. то есть в держателе привязки, если щелкнуть, установить выбранный цвет, а не щелкнуть, установить другой цвет

sharedprefrence не будет отличным решением, потому что все состояние позиции должно сохраняться при нажатии или нет. если вы хотите использовать sharedprefernce, сделайте его массивом состояний в соответствии с положением и сохраните в нем.

для каждой позиции нужен массив состояний или используйте sqllite

Используйте базу данных SqLite, сохраните список элементов в базе данных и включите столбец ReadUnRead в таблицу. всякий раз, когда пользователь щелкает элемент, установите для ReadUnRead значение 1, а в Recycler Adapter OnBindView любой элемент, для которого ReadUnRead равен 1, изменит свой цвет.

Ответ принят как подходящий

Это значение не следует сохранять в SharedPreferences, поскольку оно является частью объекта, который вы хотите отобразить.

Поскольку это DAO, это означает, что у вас где-то есть база данных. Поэтому, когда пользователь выбирает элемент, вы обновляете поле isRead и обновляете базу данных.

Затем, когда вы хотите снова отобразить список, вам просто нужно проверить, является ли isRead истинным или ложным, чтобы соответствующим образом отобразить цвет элемента.

когда я нахожусь в приложении, во время щелчка по элементу цвет изменился, но когда я закрываю приложение и открываю его снова, цвет включается, это выделено жирным шрифтом

007 27.06.2018 11:26

Да, потому что вам нужно сохранить значение в базе данных. Все остальное хранится в памяти и теряется при закрытии приложения.

Eselfar 27.06.2018 11:27

прямо сейчас я создаю локальный метод получения и установки с использованием логического значения, но я хочу постоянно изменять состояние, когда пользователь читает сообщение, оно всегда остается таким же.

007 27.06.2018 11:29

Вы меняете состояние объекта, хранящегося в памяти. Что вам нужно сделать, так это обновить значение в базе данных (как я предполагал, вы получаете объект из базы данных)

Eselfar 27.06.2018 11:31

Я, хотя достаточно, чтобы сохранить все значения в общих предпочтениях, иначе мы должны хранить все изменения в удаленной базе данных?

007 27.06.2018 11:32

Откуда у вас список alarmDao?

Eselfar 27.06.2018 11:34

Итак, что вы можете сделать, это установить идентификатор (жестко запрограммированный) в вашем объекте DAO и сохранить этот идентификатор в SharePreferences

Eselfar 28.06.2018 12:52

у тебя есть твттер-идентификатор?

007 28.06.2018 13:13

Нет, зачем тебе идентификатор в Твиттере?

Eselfar 28.06.2018 13:28

я хочу подробно описать может быть вы не поняли должным образом

007 28.06.2018 13:36

Тогда, возможно, тебе стоит просто обновить свой вопрос. Поскольку вы не одобрили никаких ответов, я полагаю, что никто этого не понял.

Eselfar 28.06.2018 15:51

Вам нужно создать database и сделать для этого одну переменную Boolean, например true.false, и установить значение в этой переменной, если она была нажата, а затем изменила ее значение на true. или другое решение: вам нужно создать shared preference и установить и получить из него значение, но я рекомендовал вам использовать database.

Другие вопросы по теме