Nano Hash - криптовалюты, майнинг, программирование

Android Как сохранить состояние флажков, которые являются 3 разными отмеченными состояниями

Я новичок в разработке Android, и мне интересно, как локально сохранить состояние флажка, когда пользователь повторно открывает приложение, а флажок остается красным, желтым или зеленым. У меня есть код во фрагменте, и каждый раз, когда я открываю приложение, я установил красный цвет по умолчанию. У меня есть настраиваемые флажки, где они круглые, и когда пользователь нажимает на флажок, он остается отмеченным, но меняет цвет. Я много исследовал и пробовал SharedPreferences, но он не работает, и мне нужно знать, какова логика для того, чтобы пользователь щелкнул флажок и увидел, красный ли он, желтый или зеленый. То, что я видел, это то, что флажок установлен только один раз, и что он сохраняет состояние, если он отмечен или нет, но у меня есть флажки, которые проверяются несколько раз и каждый раз меняют цвет. Вот мой код для метода, который я использую для флажков:

public int checked(CheckBox checkBox, int count){
    if (checkBox.isChecked()){
        count++;
    } else if (!checkBox.isChecked()){
        checkBox.setChecked(true);
        count++;
    }
    if (count == 1){
        checkBox.setButtonDrawable(R.drawable.custom_yellow_checkbox);
    }
    if (count == 2){
        checkBox.setButtonDrawable(R.drawable.custom_green_checkbox);
    }
    if (count > 2){
        count = 0;
        checkBox.setButtonDrawable(R.drawable.custom_red_checkbox);
    }
    return count;
} 

Вот сам метод флажка, когда он отмечен.

chkStart.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            countStart = checked(chkStart, countStart);
        }
    });

Итак, мне интересно, есть ли способ сохранить состояние флажка внутри проверенного метода или использовать другие методы для этого. Если кто-нибудь знает, как сохранить состояние для флажков и чтобы они оставались определенными, при этом они проверялись 0, 1 или 2 раза, я был бы очень признателен. Заранее спасибо!


Ответы:


1

На самом деле, SharedPreferences был бы хорошим выбором для сохранения состояния флажков, даже если приложение закрыто. Просто сохраните правильный дубликат ключ: значение, чтобы он работал: я бы использовал checkboxId в качестве ключа и переменную count, которую вы используете в качестве значения. Например:

    SharedPreferences mSharedPreferences = this.getSharedPreferences("preferences_key", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor;

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    editor = mSharedPreferences.edit();

    chkStart.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            countStart = checked(chkStart, countStart);
            editor.putInt("checkStartId", countStart);
            editor.apply();
        }
    });
}

    @Override
    protected void onResume() {
        super.onResume();
        int value = mSharedPreferences.getInt("checkStartId", 0) // 0 is the default value, in case there is not value saved
    }

Чтобы установить состояние флажка при запуске приложения (например, в методе onResume()), получите значение счетчика из SharedPreferences для определенного флажка и установите правильный цвет.

15.06.2017
  • Можете ли вы показать мне, как получить значение счетчика в onResume()? Это editor.getInt(что-то) или какой метод получить значение счетчика. Спасибо! 15.06.2017
  • Я также получаю исключение нулевого указателя с переменной контекста. Что мне инициализировать, чтобы контекст был таким, чтобы у меня не было исключения нулевого указателя? 15.06.2017
  • Я обновил свой ответ, я не проверял его, но думаю, что он сработает, используйте его в качестве примера! :) 15.06.2017
  • Вы используете значение переменной? Если да, то как мне узнать, какого цвета флажок? 15.06.2017
  • Есть ли способ просто сделать это во фрагменте или у меня должна быть активность для использования общих настроек? Я бы предпочел не заниматься, потому что вся моя установка состоит из фрагментов, но если мне нужно, я сделаю это, но, надеюсь, я смогу просто сделать это во фрагменте. Пожалуйста, дайте мне знать, если я могу сделать это только фрагментом. 15.06.2017
  • Конечно, вы можете использовать его на фрагменте. Что касается цвета, просто используйте код, который вы разместили: если значение равно 1, установите желтый цвет, если значение равно 2, зеленый и больше 2, красный. 16.06.2017
  • Кажется, это не работает. Я не уверен, действительно ли он получает значения флажков и оставляет их в том цвете, в котором они были проверены в последний раз. Он продолжает оставаться красным, когда я возвращаюсь к нему, даже если не закрываю приложение и просто перехожу в другую часть приложения. Вы уверены, что этот код может работать только во фрагменте и без активности? Можете ли вы на самом деле сохранить данные во фрагменте? 16.06.2017
  • Да, ты можешь. Просто позаботьтесь о жизненном цикле (onCreate, onResume и т. д.): жизненный цикл фрагмента отличается от жизненного цикла активности. Попробуйте использовать отладчик и регистратор (log.i, log.e, log.w и т. д.), чтобы проверить правильность сохранения/восстановления значений. 16.06.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..