2016-08-24 33 views
0

我的mainActivity包含5個片段,您可以通過選項卡切換。開始時顯示的主選項卡是第三個(中間的那個)。我在片段#1中有一個按鈕,打開activityTwo。我應該在activityTwo中放置onBackPressed方法,以便讓我使用選定的選項卡#1返回mainActivity。我現在有這一點,但它打開mainActivity並顯示主選項卡(#3)如何選擇從特定活動打開哪個片段?

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(this, MainActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
    startActivity(intent); 
    ActivityTwo.this.finish(); 
} 

我怎樣才能使其顯示標籤#1,而不是標籤#3?

+0

使用意圖,它可能是一個布爾檢查,如果該按鈕已被按下或沒有,你將適配器設置爲#3檢查它是否被按下..如果是,然後去標籤#1 |如果您打算爲其他活動提供更多按鈕,則可以在意圖中使用數字來指定每次活動的片段 –

回答

2

您的第一個活動仍應該放在活動堆棧中,因此您不應再次致電startActivity。相反,你可以使用setResult傳遞一個值回你的第一個活動:

// Inside your second activity 
@Override 
public void onBackPressed() { 
    setResult(RESULT_OK); 
    finish(); 
} 

然後,從您的第一項活動,與startActivityForResult取代startActivity,用請求的代碼(你想要的任何整數,只要它是獨一無二的):

startActivityForResult(intent, YOUR_REQUEST_CODE);

然後重寫onActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == YOUR_REQUEST_CODE) { 
     if (resultCode == RESULT_OK) { 
      // Code to select tab 1 here 
      // mTabLayout.getTabAt(0).select(); 
     } 
    } 
} 
+0

因此,我需要在onBackPressed中將結果設置爲OK,以便在返回時設置結果主要活動。而不是startActivity,我應該使用意向和請求代碼的startActivityForResult? –

+0

@ N.Park是的,沒錯。我編輯了我的答案,使其更清楚。 –

0

我想你使用的是查看傳呼機,所以當你從活動2返回時,使用viewPager.setCurrentItem(page);

其中頁面將是您的選項卡號(在這種情況下,它將爲2,因爲它以0開頭)。希望這有助於,如果不是,那麼請澄清一點。