onsaveinstanceStateは、ビューの「実現」を節約する必要がありますか?
-
27-09-2019 - |
質問
私は、私のアプリケーションの言語とテーマを変更できる設定アクティビティを持っています。そこから、バックキーを介して以前のアクティビティに戻り、アクティビティを再現したいと思います。
私はレイアウトを再初期化することによってなんとかそれをすることができました onResume
また、呼び出します onRestoreInstanceState
そこから。すべてのビューは適切に復元され、必要に応じてチェックボックスがチェックされ、編集は以前に残ったテキストで満たされています。
ただし、最初に無効になっているボタンもあり、ラジオボタンがチェックされた場合にのみ有効になります。問題は次のとおりです。ラジオボタンをチェックして、ボタンが有効になります。次に、設定に行き、そこでテーマを変更し、最初のアクティビティに戻ります。私がそこに到着すると、ラジオボタンはチェックされたときに復元されますが、ボタンは無効になります。
したがって、有効化/無効状態はバンドルに保存されていないようです。これは直感に反するようです。また、Androidソースにこれを行うコードも見つかりませんでした。何かが足りないのですか、それとも自分のコードを書く必要がありますか?
編集:ところで、状態はIDを持つビューのためにのみ保存されます。そして、そのボタンにはそれがあります、私はそれを保証します:)
解決
ここで重要なのは、実際にボタンを有効にしているものを確認し、アプリケーションへのすべてのアクセスに一貫していることを確認することです。
あなたの声明から:
ただし、最初に無効になっているボタンもあり、ラジオボタンがチェックされた場合にのみ有効になります。
ボタンを有効にするラジオボタンにリスナーがいるようです。これから、ボタンが最初に無効になっていることを収集します。つまり、アクティビティを実行するたびに変更する必要があります。
あなたのオプションは次のとおりです:
- RadioButtonに、Onresumeでチェックされているある種のグローバルな好みを設定してもらい、必要に応じてボタンを有効にします
- ラジオボタンがチェックされたら、グローバル設定(またはおそらくGUI設定)をボタンが有効になっている設定に変更します。それは、ラジオバイトンが再びチェックされるまで永遠にとどまることができます。
- あなたが言及しているように、onsaveinstanceStateでの実現を節約します
ユースケースのコンテキストについて言及していないため、どちらが最も適切であるかを知ることは困難ですが、非常に時折使用されているアクティビティでない限り、バンドルに送信することを避けます。ラジオボタンの設定を保存するか、さらに通知するまでビューを変更することにより、ラジオボタンの設定を追跡することは非常に理にかなっています。
他のヒント
最も簡単な方法は、RadioButtonがチェックされている場合、Onresumeでボタンを有効にすることです。
編集: PreferenceGroup ビュー間の依存関係を処理できますが、アクティビティがサブクラスになる必要があります 優先感性.