Как сохранить состояние rediobutton во всем приложении в Android? - PullRequest
3 голосов
/ 13 декабря 2011

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

        final RadioButton radioOn = ( RadioButton )findViewById(
        R.id.rbOn );
    final RadioButton radioOff = ( RadioButton )findViewById(
        R.id.rbOff );
    radioOn.setChecked( true );
    radioOn.setOnClickListener( auto_lock_on_listener );
    radioOff.setOnClickListener( auto_lock_off_listener );

, пожалуйста, помогите.

Ответы [ 5 ]

2 голосов
/ 13 декабря 2011

Вам нужно переопределить onSaveInstanceState (Bundle saveInstanceState) и записать значения состояния приложения, которые вы хотите изменить, в параметр Bundle, например так:

@Override

    public void onSaveInstanceState(Bundle savedInstanceState) {
      // Save UI state changes to the savedInstanceState.
      // This bundle will be passed to onCreate if the process is
      // killed and restarted.
      savedInstanceState.putBoolean("MyBoolean", true);
      savedInstanceState.putDouble("myDouble", 1.9);
      savedInstanceState.putInt("MyInt", 1);
      savedInstanceState.putString("MyString", "Welcome back to Android");
      // etc.
      super.onSaveInstanceState(savedInstanceState);
    }

Bundle - это, по сути, способ хранения NVP ("Карта имя-значение "), и она будет передана в onCreate, а также в onRestoreInstanceState, где вы будете извлекать значения следующим образом:

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
  double myDouble = savedInstanceState.getDouble("myDouble");
  int myInt = savedInstanceState.getInt("MyInt");
  String myString = savedInstanceState.getString("MyString");
}

Этот метод обычно используется для хранения значений экземпляра дляВаша заявка (выборки, несохраненный текст и т. д.).

1 голос
/ 06 января 2012

Попытайтесь сохранить состояние своей радиогруппы, используя SharedPreferences

     RadioGroup rG1 = (RadioGroup)findViewById(R.id.radioGroup1);
        int rG1_CheckId = rG1.getCheckedRadioButtonId();

SharedPreferences rG1Prefs = getSharedPreferences("rG1Prefs", MODE_WORLD_READABLE);
                SharedPreferences.Editor prefsEditor = rG1Prefs.edit();
                prefsEditor.putInt("rG1_CheckId", rG1_CheckId);
                prefsEditor.commit();

и поместите эти строки для возврата проверенного идентификатора радиокнопки.

SharedPreferences rG1Prefs = this.getSharedPreferences("rG1Prefs", MODE_WORLD_READABLE);
        rG1Prefs.getInt("rG1_CheckId", null);

и с помощью этого проверенного идентификаторапереключатель.

0 голосов
/ 13 декабря 2011

Используйте этот код -

mFillingGroup.check(whichFilling);
    mAddMayoCheckbox.setChecked(addMayo);
    mAddTomatoCheckbox.setChecked(addTomato);

    /**
     * We also want to record the new state when the user makes changes,
     * so install simple observers that do this
     */
    mFillingGroup.setOnCheckedChangeListener(
            new RadioGroup.OnCheckedChangeListener() {
                public void onCheckedChanged(RadioGroup group,
                        int checkedId) {
                    // As with the checkbox listeners, rewrite the
                    // entire state file
                    Log.v(TAG, "New radio item selected: " + checkedId);
                    recordNewUIState();
                }
            });

    CompoundButton.OnCheckedChangeListener checkListener
            = new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            // Whichever one is altered, we rewrite the entire UI state
            Log.v(TAG, "Checkbox toggled: " + buttonView);
            recordNewUIState();
        }
    };
    mAddMayoCheckbox.setOnCheckedChangeListener(checkListener);
    mAddTomatoCheckbox.setOnCheckedChangeListener(checkListener);
}

/**
 * Handy helper routine to write the UI data to a file.
 */
void writeDataToFileLocked(RandomAccessFile file,
        boolean addMayo, boolean addTomato, int whichFilling)
    throws IOException {
        file.setLength(0L);
        file.writeInt(whichFilling);
        file.writeBoolean(addMayo);
        file.writeBoolean(addTomato);
        Log.v(TAG, "NEW STATE: mayo=" + addMayo
                + " tomato=" + addTomato
                + " filling=" + whichFilling);
}

И, может помочь вам сделать все, что вам нужно.

0 голосов
/ 13 декабря 2011

вы можете сохранить в SharedPreference

простой пример

SharedPreferences settings = getSharedPreferences("on_off", 0);    
boolean silent = settings.getBoolean("onoff", false);
////// to set the value use editor object from the SharedPreferences

Editor editor = settings.edit();
editor.putBoolean("onoff", true);
editor.commit(); // to save the value into the SharedPreference
0 голосов
/ 13 декабря 2011

Использование Общие настройки , Чтобы сохранить состояние переключателя, Или вы можете использовать Переменные приложения (Переменная, которая объявлена ​​глобально статической в ​​этом действии, и вы можете использовать ее в любом действии )

Но я думаю, что общие настройки это хорошо ..

Посмотрите на Android - Общие настройки

Посмотрите на этот пример Как сохранить информацию для входа в Android с общими настройками (функция запоминания деталей)

EDIT:

public  class Test extends Activity   {     

private SharedPreferences prefs;
private String prefName = "MyPref";
private SharedPreferences.Editor editor; 
private static final String CHECK_STATE = "checkBox_State";
private boolean check_state;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings);

    //---getting the SharedPreferences object....
    prefs = getSharedPreferences(prefName, MODE_PRIVATE);    
    editor = prefs.edit();

    radioOn.setOnClickListener(new OnClickListener()  {
        public void onClick(View v)  {               
            if (((CheckBox) v).isChecked()) {
                check_state = true;                                 
            } else {
                check_state = false;                                    
            }
        }
    });

            // storing in shared preferences...
    editor.putBoolean(CHECK_STATE, check_state );             
    editor.commit();
    }
   });
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...