簡體   English   中英

按鈕文字在方向更改時重置

[英]Button text gets reset on orientation change

在我的Android應用中,我正在嘗試解決方向更改的問題。

我有一個主要布局,其中有兩個按鈕。 單擊第一個按鈕(此按鈕上的默認文本為“選擇類別”)時,將出現一個對話框,其中包含類別列表,其中類別顯示為單選按鈕。 用戶選擇類別后,所選類別名稱將顯示在按鈕上。 現在,當我在模擬器中更改方向時,Button文本將再次重置。 我使用了如下的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()可以保存和還原數據。

要保存狀態信息,請重寫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);
}
 }
@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"
  .../>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM