Текст кнопки сбрасывается при изменении ориентации - PullRequest
0 голосов
/ 30 августа 2018

В моем приложении для Android я пытаюсь решить проблему с изменением ориентации.

У меня есть основной макет, где у меня есть две кнопки. При нажатии первой кнопки (текст по умолчанию для этой кнопки - «Выбрать категорию»), появляется диалоговое окно со списком категорий, в которых категории отображаются в виде переключателей. После того, как пользователь выбирает категорию, название выбранной категории появляется на кнопке. Теперь, когда я меняю ориентацию в эмуляторе, текст кнопки снова сбрасывается. Я использовал onSaveInstanceState (), как показано ниже.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
// Initialization code

categoryList=(Button)findViewById(R.id.category_selection);

    if (savedInstanceState != null)
    {
        System.out.println("savedInstanceState--- 
        "+savedInstanceState.getString("bundle_category_name"));
        categoryName=savedInstanceState.getString("bundle_category_name");
        categoryList.setText(categoryName);
    }
    else
    {
        categoryList.setText(R.string.category);
    }
// remaining code 
}

@Override
public void onSaveInstanceState(Bundle outState)
{
    super.onSaveInstanceState(outState);
    // Save selected category name
    System.out.println("saving category name "+categoryName);
    outState.putString("bundle_category_name", categoryName);
}

Я могу вернуть имя категории в onCreate (), sysout печатается правильно. Но он не устанавливается как текст кнопки после изменения ориентации. Пожалуйста, дайте мне знать, если я делаю что-то не так.

Спасибо

Ответы [ 3 ]

0 голосов
/ 30 августа 2018
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(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", "back to Android");
// etc.
 }

Извлечь данные

@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");
  }
0 голосов
/ 30 августа 2018

Добавить android: configChanges = "direction | screenSize" в файле манифеста Android.

 <activity android:name="YourActivity"
  ...
  android:configChanges="orientation|screenSize"
  .../>
0 голосов
/ 30 августа 2018

Сохранение и восстановление данных работает с использованием двух методов жизненного цикла Activity, которые называются onSaveInstanceState () и onRestoreInstanceState ().

Чтобы сохранить информацию о состоянии переопределить метод onSaveInstanceState () и добавить пары ключ-значение в объект Bundle, который сохраняется в случае, если ваша активность неожиданно уничтожается. Этот метод вызывается перед onStop ().

Чтобы восстановить сохраненное состояние из метода переопределения Bundle onRestoreInstanceState (). Это вызывается после onStart () и перед onResume (). Проверьте код ниже

             public class MainActivity extends Activity{

       private static final String SELECTED_ITEM_POSITION = "ItemPosition";
       private int mPosition;

        @Override
      protected void onSaveInstanceState(final Bundle outState) {
    super.onSaveInstanceState(outState);

    // Save the state of item position
     outState.putInt(SELECTED_ITEM_POSITION, mPosition);   
}

@Override
protected void onRestoreInstanceState(final Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    // Read the state of item position
    mPosition = savedInstanceState.gettInt(SELECTED_ITEM_POSITION);
}
 }
...