簡體   English   中英

Android在方向更改時保存狀態

[英]Android save state on orientation change

我有一個Android應用程序,該應用程序維護有關行進距離,經過時間等的狀態。當用戶更改屏幕時,當Android調用onDestroy()時,我可以方便地將該狀態存儲在對象中,並將對該對象的引用存儲在Bundle中方向,然后在onCreate(Bundle savedBundle)中恢復狀態。 但是,我在屏幕上的Buttons和EditText對象中也有一些狀態,我想通過屏幕方向保持該狀態。 例如,在onStart(Bundle savedBundle)中,我調用:

_timerButton.setBackgroundColor(Color.GREEN);
_pauseButton.setBackgroundColor(Color.YELLOW);
_pauseButton.setEnabled(false);

然后,在我的應用程序的整個操作過程中,這些按鈕的顏色/啟用狀態將被更改。 是否有更方便的方法來持久保存用戶界面項(EditText,Button對象等)的狀態,而不必手動保存/恢復每個按鈕的每個屬性? 必須在屏幕方向之間手動管理這種狀態真的很笨拙。

謝謝你的幫助。

您是否嘗試過使用:通過它的工作

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

在清單文件中?

默認情況下它不起作用,因為,當您更改方向時,將再次調用onCreate並重繪視圖。

如果您在Activity中無需處理此參數,則框架將處理其余工作。 如果更改方向,它將保留屏幕或布局的狀態。

注意如果橫向模式使用其他布局,則通過添加這些參數,不會調用橫向模式的布局。

另一種方法另一種方法

要保存變量或值,應使用onSaveInstanceState(Bundle);。 並且當方向更改時,應該恢復的值也應該使用onRestoreInstanceState(),但不是很常見。 onRestoreInstanceState()在onStart()之后調用,而onCreate()在onStart()之前調用 。使用put方法將值存儲在onSaveInstanceState()中。

protected void onSaveInstanceState(Bundle icicle) {
  super.onSaveInstanceState(icicle);
  icicle.putLong("param", value);
}

並恢復onCreate()中的值:

public void onCreate(Bundle icicle) {
  if (icicle != null){
    value = icicle.getLong("param");
  }
}

暫無
暫無

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

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