向きの変更後にアクティビティが再作成される前にインテントバンドルデータを変更する

StackOverflow https://stackoverflow.com/questions/1206418

  •  05-07-2019
  •  | 
  •  

質問

アクティビティを開始し、インテントのputExtra()関数を使用してメッセージを渡す通知があります。メッセージは、アクティビティのonCreate関数でユーザーに表示されます。向きの変更によりアプリケーションが再起動されると、メッセージはインテントのバンドルデータに残っているため、再び表示されます。

余分なデータを削除するにはどうすればよいですか

次のことを試しました:

Bundle bundle = getIntent().getExtras();
if (bundle.getBoolean("showMessage")) {
    // ... show message that is in bundle.getString("message")
    // remove message
    bundle.remove("showMessage");
}

ただし、方向が変更された後もメッセージは表示されます。使用される意図は、私が変更したものではなく、元の意図であるようです。私が見つけた唯一の回避策は、o nSaveInstanceState()にshowMessageを追加で保存することです。 別の方法はありますか?それともこれが道ですか?

役に立ちましたか?

解決

(単純な)解決策は次のとおりです。

呼び出す代わりに

bundle.remove("showMessage");

今使用しています

getIntent().removeExtra("showMessage");

これは期待どおりに機能します。 getIntent()。getExtras()は参照ではなくコピーを返すようです。

他のヒント

あなたの onSaveInstanceState()のアプローチは正解です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top