2012-01-02 2 views
0

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

myBox1.setOnClickListener(new OnClickListener() { 
     @Override 

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

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

ответ

0

Одним из вариантов было бы использовать Shared Preferences, чтобы сохранить выбранное состояние для каждого из ваших флажков.

// 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

Это работает нормально, но все же, когда я возвращаюсь к активности, где я проверил флажок, зеленый галочка isnt там больше. Поэтому я думаю, что sytem получает его сейчас, но как я могу подключить его к представлениям? –

+0

@ C.Mandy Предполагая, что вы правильно сохраняете настройки, когда вы показываете активность, устанавливаете ли вы ее состояние? См. Мой отредактированный пост. –

0

Если количество флажков то же самое, держать булев массив

+0

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

0

Вы можете отобразить идентификатор флажка в это состоянии с помощью глобальной HashMap. Затем вы подклассы Checkbox, переопределяя по мере необходимости сохранение/восстановление состояния в Map и вместо этого используйте свой класс в 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(); 

Из верхней части моей головы я подумайте, что это лучший способ.

Смежные вопросы