savedInstanceState が常に null である。
質問
これは私のsavedInstaceStateのコードです。
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
savedInstanceState.putStringArrayList("todo_arraylist", Altodo);
Log.v("bundle", "Saved");
super.onSaveInstanceState(savedInstanceState);
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (savedInstanceState != null)
{
Altodo = savedInstanceState.getStringArrayList("todo_arraylist");
Log.v("bundle", "Restored");
}
else
{
Log.v("bundle", "null");
}
setContentView(R.layout.main);
}
ログには常に "bundle save" タグが表示されます。
しかし
onCreate
メソッドで
SavedInstanceState
は常に null です。
どのように解決するのですか?
私はまったく同じ症状 (以下のように報告されています) を観察しました。
問題 133394
として報告されています) とまったく同じ症状が、2 つのアクティビティからなるプロジェクトで発生しました。
A
と
B
を拡張する
ActionBarActivity
. アクティビティ
A
がメインのアクティビティで、いつも受け取る
null
に対して
savedInstanceState
で
onCreate
から戻ってきたときに、そのリストフラグメントの
B
. 何時間も経った後、この問題は、偽装されたナビゲーションの問題であることが私に明らかになりました。
以下は、私のセットアップに関連するもので、このページの他の回答から来たものである可能性があります。
- 与えられた この の回答があったので、フラグメントとアクティビティにそれぞれユニークなIDが設定されていることを確認しました。
-
のオーバーライドはありません。
onSaveInstanceState
がなければsuper
を呼び出します。 -
活動内容
A
はacitivyとして指定されます。
B
の親である
AndroidManifest.xml
の両方を使ってandroid:parentActivityName
属性と、それに対応するmeta-data
タグを使用することができます(" アップナビゲーションの提供 ")を参照してください。
などの対応する作成コードなしですでに
getActionBar()
.setHomeButtonEnabled(true)
活動
B
は、戻るボタンが機能している (
<
)があります。このボタンがタップされると、アクティビティ
A
が再表示されるが
(a)
で、以前のインスタンスの状態はすべて失われます。
(b)
onCreate
は常に呼び出され
(c)
savedInstanceState
常に
null
.
面白いことに、エミュレータのディスプレイの下端に用意された戻るボタン(左向きの三角形が開いたもの)をタップすると、アクティビティ
A
を呼び出すことなく、そのまま (すなわち、そのインスタンス状態が完全に保持された状態で) 再表示されます。
onCreate
. だから、多分ナビゲーションに何か問題があるのでしょうか?
その後 もっと読む で、戻るボタンがタップされたときに実行される独自のナビゲーション命令を実装しました。 B :
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home)
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
アクティビティのインスタンス状態の復元に関連するものはありません
A
を変更しました。
NavUtils
もメソッドを提供します。
getParentActivityIntent(Activity)
と
navigateUpTo(Activity, Intent)
というアクティビティを明示的に指示するために、ナビゲーションインテントを修正することができます。
A
を設定することで、アクティビティが新しく開始されない(つまり、保存されたインスタンス状態が提供されない)ように、ナビゲーションインテントを変更することができます。
FLAG_ACTIVITY_CLEAR_TOP
フラグを設定することで
もし設定されていて、起動されるアクティビティがすでに現在のタスクで実行されている場合 現在のタスクで実行されている場合、そのアクティビティの新しいインスタンスが起動されるのではなく アクティビティの新しいインスタンスを起動する代わりに、その上にある他のすべてのアクティビティが閉じられ このIntentは、新しいIntとして(今トップにある)古いアクティビティに配信されます。 新しいIntentとして(今トップの)古いアクティビティに配信されます。
私の手元では、これはインスタンスの状態が失われる問題を解決し、次のように見えるかもしれません。
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId()== android.R.id.home) {
Intent intent = NavUtils.getParentActivityIntent(this);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, intent);
return true;
}
return super.onOptionsItemSelected(item);
}
これは、ユーザーが直接アクティビティに切り替えることができる他のケースでは、完全な解決策にならないかもしれないことに注意してください。
B
に直接切り替えられるようなケースでは、完全な解決策とはならないかもしれません。
はこちら
). また、同じような動作で
NavUtils
を利用しないビヘイビアでは、単に
finish()
:
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId()== android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
どちらの解決策も私の手元では動作します。元の問題は、戻るボタンのデフォルトの実装がわずかに間違っていることで、その実装がある種の
navigateUp
を呼び出すことに関係しているのかもしれません。
FLAG_ACTIVITY_CLEAR_TOP
.
関連
-
[解決済み] HttpPostによる画像送信
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] Androidでマイナスマージンを使用するのは悪いことですか?
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] Androidのadb logcatでTAG名で特定のメッセージを除外する方法は?
-
[解決済み] AsyncTaskを複数回実行する
-
[解決済み] Android: ランドスケープモード用の代替レイアウト xml
-
[解決済み] Android - Snackbar vs Toast - 使い方と違い。
-
[解決済み] TextView.setTextSizeの挙動がおかしい - テキストビューのテキストサイズを画面ごとに動的に設定する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] AppCompat-v7 21でアクションバー/ツールバーにアイコンを表示する。
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] ArrayList<MyCustomClass>をJSONArrayに変換する。
-
[解決済み] APKが署名済みかデバッグビルドかを確認するには?
-
[解決済み] ProjectScopeServices に Factory タイプのサービスはありません。
-
[解決済み] サポートライブラリのアクションバーをPreferenceActivityに追加するには?
-
[解決済み] LayoutParamsの高さを密度に依存しないピクセル数でプログラム的に設定する。
-
[解決済み] Recyclerviewと異なるタイプの行のインフレーションの処理
-
[解決済み] HttpURLConnectionを使ったPOSTによるファイル送信