Как сохранить состояние флажка без дополнительных переменных? - PullRequest
0 голосов
/ 02 января 2012

У меня более 100 различных флажков в 6 активностях, и я хотел бы сохранить состояние каждого из них, чтобы при переключении с одного действия на другое оно оставалось отмеченным.Действительно ли мне нужно создавать более 100 логических значений для сохранения каждого флажка отдельно или есть более простой способ сохранять и считывать состояния?Я думал об использовании цикла, но я не могу придумать разумный способ сделать это.Было бы здорово, если бы кто-нибудь мог помочь!Это пример одного из моих флажков: он должен добавить String к объекту ArrayList при щелчке по блоку и удалить String, когда флажок снят.Работает нормально, но когда я ухожу, например.Actvity1, зайдите в Activity2 и вернитесь в Acctivity1, чтобы снять один из моих флажков, строка добавляется в мой ArrayList во второй раз вместо удаления.

    myBox1.setOnClickListener(new OnClickListener() {
        @Override

        public void onClick(View v) {
            if (myBox1.isChecked() == true)
                helperActivity.myStringArrayList.add("myString1");

            else {
        helperActivity.myStringArrayList.remove("myString1");}
        }           
    });

Ответы [ 3 ]

0 голосов
/ 02 января 2012

Вы можете сопоставить идентификатор флажка с его состоянием, используя глобальный HashMap. Затем вы устанавливаете флажок в подкласс, переопределяя при необходимости для сохранения / восстановления состояния на карте, и вместо этого используете свой класс в файлах xml. Затем вы можете сохранить и восстановить карту при запуске приложения, используйте это для записи в файл:

        file = context.openFileOutput("checkbox_state.prefs", Context.MODE_PRIVATE);
        objectOutputStream = new ObjectOutputStream(file);
        objectOutputStream.writeObject(myCheckboxesState);

И это читать из одного:

        file = context.openFileInput("checkbox_state.prefs");
        objectInputStream = new ObjectInputStream(file);
        myCheckboxesState = (Map<Integer, Boolean>) objectInputStream.readObject();

От макушки головы я думаю, что это лучший способ.

0 голосов
/ 02 января 2012

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

// Access the default SharedPreferences
SharedPreferences preferences = 
  PreferenceManager.getDefaultSharedPreferences(this);

...

SharedPreferences.Editor editor = preferences.edit();
// Save the checked state
editor.putBoolean("myBox1", true);
editor.commit();

...

// Get and set the checked state
boolean myBox1State = preferences.getBoolean("myBox1", false);
myBox1.setChecked(myBox1State);

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

0 голосов
/ 02 января 2012

Если количество флажков одинаково, сохраняйте логический массив

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