1

我有一個程序,當一個用戶點擊一個按鈕時,它會從一個片段到另一個片段。問題在於,我希望在點擊後退按鈕後,前一個片段重新出現。代碼如下:回到上一個片段

這創造了第一個片段:

getFragmentManager().beginTransaction().add(R.id.team_fragment_holder, teamFragment).addToBackStack(null).commit(); 

,這是切換到第二個片段:

setContentView(R.layout.mixed_team_holder); 
    FragmentManager fragMan = getFragmentManager(); 
    FragmentTransaction fragTrans = fragMan.beginTransaction(); 
    fragTrans.add(R.id.team_1,team1); 
    fragTrans.add(R.id.team_2, team2); 
    fragTrans.commit(); 

現在的問題是,當我打的返回按鈕,出現一個空白頁面(我假設是(R.id.team_fragment_holder)。任何想法使第一個片段與其上的所有信息一起重新出現?

注意:所有片段擴展listfragment。

在此先感謝。

回答

4

您的初始片段事務不應該添加到堆棧中,第二個應該添加到堆棧中。您按下後看到的空白頁是刪除teamFragment的結果,因爲它位於後臺。

getFragmentManager().beginTransaction().add(R.id.team_fragment_holder, teamFragment).commit(); 

FragmentManager fragMan = getFragmentManager(); 
FragmentTransaction fragTrans = fragMan.beginTransaction(); 
fragTrans.add(R.id.team_1,team1); 
fragTrans.add(R.id.team_2, team2); 
fragTrans.addToBackStack(null); 
fragTrans.commit(); 
+0

謝謝,但沒有奏效。點擊後退按鈕後,我仍然會看到空白頁。在創建下一個片段之前,是否必須保存上一個片段中的所有內容,並在按下後退按鈕後重新加載它? –

+0

或者可能是空白屏幕,因爲我設置了一個新的佈局顯示team1和team2片段? –

+0

這可能是因爲你設置了一個新的佈局。你不應該像這樣重新設置你的佈局。它可以/應該全部用編程方式處理碎片。 –

1

您需要添加到後退堆棧的片段。

FragmentManager fragMan = getFragmentManager(); 
FragmentTransaction fragTrans = fragMan.beginTransaction(); 
fragTrans.add(R.id.team_1,team1); 
fragTrans.add(R.id.team_2, team2); 
fragTrans.addToBackStack(null);//Here add the fragment 
fragTrans.commit(); 

而且您需要驗證後退按鈕。響應

@Override 
public void onBackPressed() { 
    if (getSupportFragmentManager().getBackStackEntryCount() == 0) { 
     super.onBackPressed(); 
    } else { 
     getSupportFragmentManager().popBackStack(); 
    } 
} 
+0

「活動」已經爲你處理彈出碎片堆棧。沒有必要重寫onBackPressed()。 –

+0

與第一個答案相同的問題:按下後退按鈕後會顯示空白頁。只是想知道是否需要在調用第二個碎片之前保存第一個碎片上的所有內容,然後重新加載它。謝謝! –

+0

它爲我工作,超級 –

1
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.fragment_button_project_location_ok: 

     //getActivity().finish(); 
     //add back to previous screen 
     getFragmentManager().popBackStack(); 
     break; 

    default: 
     break; 
    } 
} 
相關問題