按钮文本在方向更改时重置

Button text gets reset on orientation change

在我的 android 应用中,我正在尝试解决方向改变的问题。

我有一个主布局,其中有两个按钮。单击第一个按钮(此按钮上的默认文本为 "Select a category")时,会出现一个对话框,其中包含一个类别列表,类别列表显示为单选按钮。用户选择类别后,所选类别名称会出现在按钮上。现在,当我在模拟器中更改方向时,按钮文本会再次重置。 我已经像下面这样使用了 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 打印正确。但是在方向改变后它没有被设置为按钮文本。 如果我做错了什么,请告诉我。

谢谢

使用名为 onSaveInstanceState() 和 onRestoreInstanceState() 的两个 Activity 生命周期方法来保存和恢复数据。

要保存状态信息,请重写 onSaveInstanceState() 方法并将键值对添加到 Bundle 对象中,以防您的 activity 意外销毁。此方法在 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);
}
 }
@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");
  }

在您的 Android 清单文件中添加 android:configChanges="orientation|screenSize"。

 <activity android:name="YourActivity"
  ...
  android:configChanges="orientation|screenSize"
  .../>