2014-07-01 150 views
0

我知道有很多關於處理Up導航的問題,但他們都不滿足我。上導航,正確的方式處理

我有3個活動:MainActivity,BookActivity,BookChaptersActivity。 BookActivity會接收一些額外內容以正確初始化。我使用這個建議的方式來瀏覽:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    // Respond to the action bar's Up/Home button 
    case android.R.id.home: 
     Intent upIntent = NavUtils.getParentActivityIntent(this); 
     if (NavUtils.shouldUpRecreateTask(this, upIntent)) { 
      // This activity is NOT part of this app's task, so create a new task 
      // when navigating up, with a synthesized back stack. 
      TaskStackBuilder.create(this) 
        // Add all of this activity's parents to the back stack 
        .addNextIntentWithParentStack(upIntent) 
        // Navigate up to the closest parent 
        .startActivities(); 
     } else { 
      // This activity is part of this app's task, so simply 
      // navigate up to the logical parent activity. 
      NavUtils.navigateUpTo(this, upIntent); 
     } 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

但是使用最多的導航裏面BookChapterActivity的時候,我又回到了BookActivity,但它被重新演員沒有,所以它是完整的混亂。 我知道推薦的方法來解決這個問題是通過使用: android:launchMode =「singleTop」 裏面的清單。但是我不認爲這是處理這個問題的正確方法。如果我想擁有多個BookActivity實例會怎麼樣?

所以我問你:這種情況應該怎麼處理好?

回答

0

一個簡單的方法是在啓動BookChapterActivity之後完成()您的BookActivity,並在返回時用新的Intent +您的額外參數啓動BookActivity。

BookChapterActivity

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) { 

    switch(item.getItemId()) { 
     case android.R.id.home: handleBack();break; //Navigation UP Button was pressed. 
     default: return true; 
    } 
    return true; 
} 

而且這種方法被稱爲:

private void handleBack() { 
//put your extras in the new intent 
    Intent bookActivity = new Intent(this,BookActivity.class); 
    bookActivity.putExtra("key","extra"); 
    startActivity(bookActivity); 
    finish(); 
} 

BookActivity(接收信息)

Intent getBundleExtras = getIntent(); 
Bundle getBundleExtrasBundle = getBundleExtras.getExtras(); 
String extra = getBundleExtrasBundle.getString("key"); 

希望有所幫助。

+0

謝謝,但是如果完成BookChapterActivity而未事先完成BookActivity並以意向啓動它呢?這種方法有什麼缺點嗎? – connexion20000

+0

是的,你會在你的堆棧中進行這項活動,這意味着如果你想以正確的方式離開你的應用(按下後退或導航按鈕),你必須兩次瀏覽這個活動 – Milchkanne