2016-09-11 26 views
1

我是Android的初學者,並試圖開發一個Android應用程序,其中我卡在後面的導航中。我的問題是: 如何管理帶有活動和片段的後臺堆棧。在Android中的後退導航

與frag1 A1的活動需要A2的活性和A2的活性顯示在其中一個列表中點擊一個用戶列表檢查用戶的個人資料,與破片2

來電A1活動在A1的活動Frag2的開放,我們使用意圖的標誌:flag_activity_reorder_to_front並添加frag1與FragmentManager交易到堆棧中現在

如果我點擊在當時它顯示frag1代替A2活性A1活動。

如果我沒有將frag1添加到backstack中,然後返回,它可以在第一次返回時使用,但是在第二次返回時它會退出應用程序。

有什麼建議嗎?

回答

0

嘗試使用單個活動並使用接口處理其中的所有片段事務。活動應該實現這個接口。 例子:

public interface FragChanger { 
    int NEXT_FRAGHELLO =1; 
    int NEXT_FRAGSET = 2; 
    int NEXT_FRAGSELECT =3; 
    int NEXT_FRAGLOG=4; 
    int NEXT_FRAGCHAT=5; 

    void onFragmentChange(int nextFrag); 


} 

下應該是在你的活動:

@Override 
    public void onFragmentChange(int nextFrag) { 

     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 


     switch (nextFrag){ 
      case NEXT_FRAGHELLO: 

       break; 
      case NEXT_FRAGSET: 
       FragSet fragSet = new FragSet(); 

       ft.replace(containerId,fragSet,"fragset"); 
       ft.addToBackStack(null); 
       ft.commit(); 

       break; 
      case NEXT_FRAGSELECT: 
       FragSelect fragSelect = new FragSelect(); 

       ft.replace(containerId,fragSelect,"fragselect"); 
       ft.addToBackStack(null); 
       ft.commit(); 
       break; 
      case NEXT_FRAGCHAT: 
       FragChat fragChat = new FragChat(); 
       ft.replace(containerId,fragChat,"fragchat"); 
       ft.addToBackStack(null); 
       ft.commit();} 
       break; 

      case NEXT_FRAGLOG: 

       ft.replace(containerId,fragLog,"fraglog"); 
       ft.addToBackStack(null); 
       ft.commit(); 
       break; 
} 

處理回到你的活動:

@Override 
    public void onBackPressed() { 
     Log.d(TAG,"button back pressed"); 
     //Check which fragment is displayed an do whatever you need 
     //for example like this 
if (getSupportFragmentManager().findFragmentById(containerId) instanceof FragLog){ 
     Fragment fl = getSupportFragmentManager().findFragmentByTag("fraglog"); 
     if (fl !=null){ 
      FragmentManager fm = getSupportFragmentManager(); 
      FragmentTransaction ft = fm.beginTransaction(); 

      ft.remove(fl); 
      ft.commit(); 
      return; 
     } 
     } 


    } 

當然,這只是一個例子,但也可以是在你的情況下有用