web-dev-qa-db-ja.com

Android向きの変更時に状態を保存

走行距離、経過時間などに関する状態を維持するAndroidアプリケーションがあります。この状態は、AndroidがonDestroyを呼び出したときに便利にオブジェクトに保存し、そのオブジェクトへの参照をバンドルに保存できます。 ()ユーザーが画面の向きを変更したら、onCreate(Bundle savedBundle)で状態を復元します。ただし、画面上のボタンやEditTextオブジェクトには、画面の向きを維持したい状態もあります。たとえば、onStart(Bundle savedBundle)で次を呼び出します。

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

その後、アプリの操作全体で、これらのボタンの色/有効ステータスが変更されます。各ボタンの各属性を手動で保存/復元することなく、ユーザーインターフェイスアイテム(EditText、Buttonオブジェクトなど)の状態を保持するためのより便利な方法はありますか?画面の向きの間でこのタイプの状態を手動で管理する必要があるのは本当に不器用です。

助けてくれてありがとう。

27
Intervention

使用してみましたか:その作業

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

マニフェストファイルに

方向を変更するとonCreateが再度呼び出され、ビューが再描画されるため、デフォルトでは機能しません。

このパラメーターをActivityで処理する必要がない場合は、フレームワークが残りの処理を行います。向きが変更された場合、画面またはレイアウトの状態を保持します。

[〜#〜] note [〜#〜]横向きモードに別のレイアウトを使用している場合、これらのパラメータを追加することにより、横向きモードのレイアウトは呼ばれない.

別の方法 および 別の方法

82
Ranjith Kumar

変数または値を保存するには、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");
  }
}
15
Androider