2014-08-27 74 views
0

我有兩個活動,活動A和活動B.現在活動A有3 Fragments其中之一啓動活動B.當我按動作欄按鈕它返回到活動A但顯示默認Fragment。我正在使用navUtils.navigateupFromSameTask回到之前的Activity我怎樣才能去活動顯示的片段與以前的活動

我怎麼能最新Fragment用戶使用show,而不是用戶第一次啓動應用時出現的默認顯示?例如,當應用程序啓動時,它顯示Fragment之一。當用戶去Fragment 2,並從它啓動活動B我想回到以前的活動顯示片段2

@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
    switch(item.getItemId()){ 
    case android.R.id.home: 
     NavUtils.navigateUpFromSameTask(this); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

在onCreate方法我有

if (savedInstanceState == null) { 
    fragmentManager = getFragmentManager(); 
    fragment = new RadioSound(); 
    selectItem(0); 
} 

然後selectItem

private void selectItem(int position) { 

    // update the main content by replacing fragments 
activeFrag = position; 
if(position == 0){ 
    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 
} 
else if(position == 1){ 
    if(conv == null) 
    conv = new Conversations(); 
    fragmentManager.beginTransaction().replace(R.id.content_frame, conv).commit(); 
} else{ 
    fragmentManager.beginTransaction().replace(R.id.content_frame, (new Preferences())).commit(); 
} 
    // update selected item and title, then close the drawer 
    mDrawerList.setItemChecked(position, true); 
    setTitle(fragments[position]); 
    mDrawerLayout.closeDrawer(mDrawerList); 
} 
+0

你如何的活動爲您添加的片段?通常情況下,Android的片段管理器將處理恢復最後顯示的片段。 – JimmyVanBraun 2014-08-27 11:41:11

+0

@AndroidGuy對不起,對於延遲迴復,但我的互聯網連接時斷時續。添加代碼添加片段 – 2014-08-29 08:00:45

+0

@NehaShukla:嗨,我注意到你已經添加內聯代碼跨度(像這樣)到編輯時的帖子;這些僅適用於句子中的實際代碼。另外,請務必在帖子中解決許多問題,比如「提前致謝」和「請幫助」。謝謝! – 2014-09-01 10:03:51

回答

0

當您從活動B返回到活動A時,您將重新創建您的片段,因此它將始終顯示您的片段1而不是所需的片段2。

你的問題是,你信任savedInstanceState來決定是否應該重新創建你的片段。但是,只有當活動被破壞時纔會調用onSaveInstanceState(),當您導航到下一個活動時,這不會立即發生。

如果您已經添加了片段,您應該在您的onCreate()活動A方法中查詢FragmentManager,否則您會進行初始片段創建。爲了做到這一點,我會添加一個標籤以更好地找到您的碎片。

private static final String FRAGMENT_TAG_CONVERSATION = "frag_conv"; 
... 
fragmentManager.beginTransaction().replace(R.id.content_frame, conv, FRAGMENT_TAG_CONVERSATION).commit(); 

然後,您可以檢查一下,如果你已經添加的片段:

if(fragmentManager.findFragmentByTag(FRAGMENT_TAG_CONVERSATION) == null)) 
    // only add it here 
相關問題