Как сохранить состояние меню?

132
23 декабря 2019, 07:40

Имеется невидимая группа элементов меню:

<group  android:id="@+id/groupBookmarks"
        android:visible="false">
        <item android:id="@+id/bookmark1"
            android:title="@string/rings"
            app:showAsAction="never"/>
</group>

Во время выполнения программы, при определенных условиях, делаю группу видимой:

navMenu.setGroupVisible(R.id.groupBookmarks, true);

Но при перезапуске приложения меню инфлейтится заново и возвращается к невидимому состоянию. Знаю про preferences, но не понимаю как этим пользоваться для моих нужд. Как я могу реализовать сохранение видимого состояния меню?

Answer 1

Я бы создал отдельный класс для работы с префами:

public class Preferences {
    private final static String VISIBILITY_FLAG = "is_visible";
    private SharedPreferences mPreferences;
    public Preferences(Context context) {
        mPreferences = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
    }
    public void setVisibilityFlag(boolean isVisible) {
        getEditor().putBoolean(VISIBILITY_FLAG, isVisible).commit();
    }
    public boolean getVisibilityFlag() {
        return mPreferences.getBoolean(FLAG, false);
    }
    private SharedPreferences.Editor getEditor() {
        return mPreferences.edit();
    }
}

После чего в активити я бы создал переменную, например (если вы знаете что такое MVP или другие архитектурные паттерны то работал бы через презентер)

private boolean isVisible;
private Preferences preferences = new Preferences(context);

И далее при изменении состояния я передавал бы значание isVisible в префы:

preferences.setVisibilityFlag(isVisible);

И соответственно при загрузке приложения получял бы их:

isVisible = preferences.getVisibilityFlag();

Вот здесь можно рассмотреть более подробно https://startandroid.ru/ru/uroki/vse-uroki-spiskom/73-urok-33-hranenie-dannyh-preferences.html

READ ALSO
Как правильно задать transition для z-index?

Как правильно задать transition для z-index?

Есть несколько карточек, они частично лежат друг на другеКак сделать так чтобы при наведении на карточку она появлялась перед всеми карточками...

162
Мобильная адаптация в swiper

Мобильная адаптация в swiper

Столкнулся с библиотекой слайдеров swiper, версия Swiper 34

595
Как сделать,чтобы скрипт ждал нового текста?

Как сделать,чтобы скрипт ждал нового текста?

Как сделать,что бы мой скрипт ждал новый текст из кнопки и вводил его в поле,а не брал его в цикле

151
JS Как преобразовать двумерный ассоциативный массив в json? [дубликат]

JS Как преобразовать двумерный ассоциативный массив в json? [дубликат]

У меня есть ассоциативный массив (объект) selectedData При попытках преобразовать его в JSON вот так:

206