こんにちは、トグル ボタンを表示するアクティビティがあります。問題は、デバイスの戻るボタンを押してアクティビティに戻ると、ボタンの状態がリセットされることです。
ライフサイクル全体を通してボタンの状態をアクティビティに「記憶」させるにはどうすればよいですか?
こんにちは、トグル ボタンを表示するアクティビティがあります。問題は、デバイスの戻るボタンを押してアクティビティに戻ると、ボタンの状態がリセットされることです。
ライフサイクル全体を通してボタンの状態をアクティビティに「記憶」させるにはどうすればよいですか?
状態がリセットされる理由は、Android アーキテクチャにより、アクティビティが完全に破棄されてから再び復元されるためです。ボタンの状態を保存するには、onSaveInstaceState() でバンドルに状態を保存し、onRestoreInstanceState() で復元する必要があります。これらのメソッドは、この種のタスク用に特別に設計されています。
したがって、答えは、ボタンの状態の保存/復元を 2 つの方法で実装する必要があるということです。
@Override
protected void onSaveInstanceState (Bundle outState) {
// Your code here
}
@Override
protected void onRestoreInstanceState (Bundle savedInstanceState) {
// Your code here
}
詳細はドキュメントを参照してください:
上記の表の「強制終了可能」列に注意してください。強制終了可能とマークされているメソッドの場合、そのメソッドがアクティビティをホストしているプロセスを返した後、そのコードの別の行が実行されることなく、いつでもシステムによって強制終了される可能性があります。このため、onPause() メソッドを使用して永続データ (ユーザー編集など) をストレージに書き込む必要があります。さらに、メソッド onSaveInstanceState(Bundle) は、アクティビティをそのようなバックグラウンド状態にする前に呼び出されます。これにより、アクティビティ内の動的なインスタンスの状態を指定されたバンドルに保存し、アクティビティが後で onCreate(Bundle) で受け取ることができます。再作成する必要があります。プロセスのライフサイクルがホストしているアクティビティにどのように結び付けられているかについての詳細は、「プロセスのライフサイクル」セクションを参照してください。