2009-07-30 15 views
6

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

追加データを削除するにはどうすればよいですか?

私は次のことを試してみました:

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

しかし向きが変化した後、メッセージが表示されます、使用目的は、私が変わっ1が、オリジナルのものではないように思えます。私が見つけた唯一の回避策は、さらにnSaveInstanceState()にshowMessageを保存することです。 別の方法がありますか?それとも、これは行く方法ですか?

答えて

20

(簡単な)ソリューションです:

代わりの

bundle.remove("showMessage"); 
を呼び出して、私は今、期待どおりに動作

getIntent().removeExtra("showMessage"); 

を使用しています。 getIntent()のようです。getExtras()は、参照ではなくコピーを返します。

+0

申し訳ございませんが、 'onSaveInstanceState'は@CommonsWareによって指摘されているようにこれを行う正しい方法です。 –

9

お客様のonSaveInstanceState()のアプローチが正解AFAIKです。

関連する問題