通常、UIビューが状態を保持していない場合、最初にチェックするのは、このUIビューにIDが割り当てられていることです。このIDなしでは、ビューは状態を復元できません。
これが解決しない場合は
<EditText android:id="@+id/text" ... />
は、あなた自身を保存し、状態を復元する必要があります。
Handling Runtime Changesをご覧ください。それはかなりあなたが何をすべきかについて説明します。
適切に再起動を処理するには、あなたの活動が通常の活動のライフサイクルを通じて、以前の状態に復元することが重要であるあなたがなるように、それはあなたの活動を破壊する前に、AndroidのはonSaveInstanceState()
を呼び出すにはアプリケーション状態に関するデータを保存できます。 onCreate()
またはonRestoreInstanceState()
の間に状態を復元することができます。アプリケーションの状態がそのままでアプリケーションが再起動することをテストするには、アプリケーションでさまざまなタスクを実行しながら構成の変更(画面の向きの変更など)を呼び出す必要があります。
あなたはonSaveInstanceState()
を無効にし、その呼び出されたときに、あなたのAcitivity状態を保存する必要があります。その後、
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putString("textKey", mEditText.getText().toString());
}
そしてonCreate()
またはonRestoreInstanceState()
状態を復元:
public void onCreate(Bundle savedInstanceState)
{
if(savedInstanceState != null)
{
mEditText.setText(savedInstanceState.getString("textKey"));
}
}
これはまだされていない場合十分であれば、onRetainNonConfigurationInstance()
をオーバーライドして、すべてのカスタムオブジェクトを返すことができます新しいアクティビティオブジェクトに再作成されたときにssedされます。それを使用する方法の詳細は、Handling Runtime Changesにあります。しかし、この関数はAndroid 3.0以降では推奨されていません(具体的にはFragmentActivity
)。ですから、これはフラグメントと一緒に使うことはできません(これはうまくいきますが、構成変更全体でオブジェクトを保持するメカニズムがあります)。
最終的にはandroid:configChanges
を使用しないでください。それを使用するのは非常に良い理由が必要です。通常、これはパフォーマンスの理由です。 UIの状態のリセットを防ぐために、今のように悪用されることはありませんでした。この属性が使用されている場合はyes、アクティビティUIはコンフィグレーションの変更時に再設定されませんが、後で破棄され再作成されるとアクティビティ状態はリセットされます。
ドキュメントはかなりよく、このオプションについて説明します。
注:システムはあなたのためにそれらを 自動的に適用されないため、自分自身を変更するコンフィギュレーションを取り扱い、代替リソースを使用する は難しい、それははるかにすることができます。 この技術は は最後の手段と考えるべきであると、ほとんどのアプリケーション
これははるかに良いアプローチのように聞こえるので、私はビットマップの代わりにこれを使用することができますし、edittextは問題にはなりません。しかし、イメージの状態を保存するためにはどの関数を使用しますか? – Sebastian
ビットマップがディスクに保存されている場合、 'onSaveInstanceState()'関数でビットマップへのパスを保存するだけです。ビットマップがメモリにある場合は、 'onRetainNonConfigurationInstance()'を使うことができます。 – inazaruk