1

Google Apiのサンプルコードには、状態の保存に関する非常に簡単な例があります。画面の回転に対処するためにこれが必要です。

getSavedText()私の問題は、メソッドと呼び出し元がどこにあるのかわからないことsetSaveText()です。デバッガーを配置しましたが、トリガーされません。すべてが「魔法」によって機能します。他に何を保存できますか?魔法を説明するドキュメントはどこにありますか

public class SaveState extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_save_state);
    ((TextView)findViewById(R.id.msg)).setText(R.string.hello_world);
}
CharSequence getSavedText() {
    return ((EditText)findViewById(R.id.saved)).getText();
}
void setSavedText(CharSequence text) {
    ((EditText)findViewById(R.id.saved)).setText(text);
} 
}

リンク http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/SaveRestoreState.html

代替リンク http://goo.gl/6TJy5

4

1 に答える 1

1

ドキュメントを読んだときに onCreate() または onRestoreInstanceState() で永続化された状態を使用するよりも onSaveInstanceState() メソッドをオーバーライドすることを期待していると混乱するため、この Api Demo サンプルは悪いものですが、そうではありません。

まず、getSavedText() および setSavedText() メソッドは、このSave & Restore Stateアクティビティでは使用されません。これらはLocalSample Instrumentationの例で使用/呼び出されます。

これらの 2 つの方法を忘れると、それらを消去できます。このサンプルがどのように機能するか見てみましょう。バックグラウンドで Android がonRestoreInstanceState()を呼び出し、すべての UI ビューがその状態をメソッドの Bundle パラメータに保持するようにします。コードをデバッグし、画面を回転させた後、このサンプルの onCreate() メソッドで savedInstanceState パラメータを調べてください。そのバンドル内の R.id.saved EditText の回転前のテキストが表示されます。主なトリックは、EditText の 1 つがその状態を保存し、もう 1 つがそうでない理由は、EditText のfreezesText属性が原因であるということです。freezesText 属性により、EditText/TextView の状態が onSaveInstanceState メソッドに保存されます。freezesText の詳細については、こちらを参照してください。

android:freezesText="true" を削除するか、save_restore_state.xml から false にするか、onRestoreInstanceState メソッドをオーバーライドし、super.onRestoreInstanceState() を呼び出さず、ローテーション (構成の変更) 後に状態が失われていることを確認します。

注: このサンプルでは onRestoreInstanceState メソッドをオーバーライドする必要はありませんが、Activity の内部状態を保存するための他の要件についてはオーバーライドする必要があります。

于 2013-02-20T01:45:06.300 に答える