2013-10-07 15 views
10

でアクティビティAに呼び出されているので、私は活動Aと私は活動Aボタンを押すと活動BにナビゲートできるようにしたいアクティビティBを持っています。それは動作しますが、上のナビゲーション(アクションバーのホームボタン)を使用してアクティビティAに戻ると、onCreate()が再び呼び出され、ユーザが入力した古い情報は失われます。のonCreateは、ナビゲーションアップ

私はこれを見ました:onCreate always called if navigating back with intentですが、彼らはFragmentsを使用しましたが、フラグメントを使用するためにアプリケーション全体を再設計する必要はないと考えています。アクティビティAが再度アクティブになるたびにonCreate()が呼び出されるのを止める方法はありますか?

+0

アップナビゲーションに親アクティビティのandroid:launchMode="singleTop"属性を設定すること'onCreate()'を呼び出さずにActivityBからActivityAに戻ることができるはずです。ファンキーなことをする必要があります。これを行うために使用しているコードを投稿してください。また、ActivityBの実行中にActivityAがまだ終了していないことを確認してください。 –

答えて

12

この動作は全く問題ありと望んでいました。 システムは、バックグラウンドにあるActivitiesを停止してメモリを解放することがあります。 同じことが起こります。装置を回転させる。

通常は(入力したテキストやもののような)インスタンスの状態は、バンドルに保存し、Activityが再作成されたときにバンドルからこれらの値を取得します。ここで

私が使用するいくつかの標準的なコードです:

private EditText mSomeUserInput; 
private int mSomeExampleField; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // TODO inflate layout and stuff 
    mSomeUserInput = (EditText) findViewById(R.id.some_view_id); 

    if (savedInstanceState == null) { 
     // TODO instanciate default values 
     mSomeExampleField = 42; 
    } else { 
     // TODO read instance state from savedInstanceState 
     // and set values to views and private fields 
     mSomeUserInput.setText(savedInstanceState.getString("mSomeUserInput")); 
     mSomeExampleField = savedInstanceState.getInt("mSomeExampleField"); 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    // TODO save your instance to outState 
    outState.putString("mSomeUserInput", mSomeUserInput.getText().toString()); 
    outState.putInt("mSomeExampleField", mSomeExampleField); 
} 
+1

これは本当に良い解決策です!そのバンドルが何であったかはわかりませんでしたが、私はそれらを使ってユーザーの情報を格納する方法を見つけるでしょう。本当にありがとう! –

+0

非常に興味があります。 Android用に3年間の開発私はこの単純なAndroidの動作に終わったわけではありません。これは意図と遊ぶのが難しい場合があります:-) – cesards

+2

UPナビを使ってBからアクティビティAに戻るとonCreateの実行をスキップする方法はありますか?私は実際にデータをフェッチするためにネットワークコールを行い、もう一度実行すると時間がかかります。それは、ユーザーが頻繁に行き来したいアプリケーションだ –

12

あなたはせずに、子から親に移動したい場合は、ボタンがonSupportNavigateUp()

@Override 
public boolean onSupportNavigateUp() { 
    onBackPressed(); 
    return true; 
} 
+0

アンドロイドには戻るボタンと戻るボタンがあります。以下からの引用:。http://developer.android.com/training/implementing-navigation/temporal.html 「のユーザーは、彼らが以前に訪れた画面の履歴を後方に移動する方法戻るナビゲーションがあるすべてのAndroidデバイスは、このタイプの[戻る]ボタンを提供します**あなたのアプリはUIに戻るボタンを追加するべきではありません** ** " –

0

をオーバーライドすることで、バック押すように振る舞う作ることができます親(のonCreateメソッドを呼び出す)を再現し、あなたのAndroidManifest.xml