2016-06-09 103 views
1

我有一个活动。这项活动有一个查看传呼机。这个viewpager有五个页面,这些页面在其内容中打开一个片段。例如,当我在第一页中打开两个片段,然后在第二个页面中打开一个片段时,就会出现问题。我回到第一页。我点击工具栏中的返回按钮。我使用popBackStack()代码去除当前可见的碎片。 但它删除所有的后台堆栈。我该如何解决这个问题?popBackStack删除所有堆栈?

getSupportFragmentManager().popBackStack(str, 
FragmentManager.POP_BACK_STACK_INCLUSIVE); 

我的算法:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     if(id == android.R.id.home){ 
      onBackPressed(); 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
     public void onBackPressed() { 
      if(getSupportFragmentManager() != null){ 
       int count = getSupportFragmentManager().getBackStackEntryCount(); 
       Log.i("Fragment Stack Count : ", count+""); 
       if (count <= 0) { 
        super.onBackPressed(); 
       } else { 
        checkBackStack(); 
       } 
      } 
     } 

     private void checkBackStack(){ 
      Log.i("BackStack", "Home Activity Count > 0"); 
      FragmentManager fm= getSupportFragmentManager(); 
      if(fm.getBackStackEntryCount() > 0){ 
       Log.i("BackStack", "Count > 0"); 
       for(int i = (fm.getBackStackEntryCount()-1) ; i >= 0 ; i--){ 
        FragmentManager.BackStackEntry backStackEntry = fm.getBackStackEntryAt(i); 
        String str= backStackEntry.getName(); 
        Log.i("BackStack", " Name : "+str); 
        BaseMenuFragment fragment= (BaseMenuFragment) fm.findFragmentByTag(str); 
        if(((ViewGroup) fragment.getView())!= null && ((ViewGroup) fragment.getView().getParent()) != null){ 
         int contentId = ((ViewGroup) fragment.getView().getParent()).getId() ; 
         if(contentId == frames[viewPager.getCurrentItem()]){ 
          Log.i("BackStack", "equals = true"); 
          getSupportFragmentManager().popBackStack(str, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
          return; 
         } 
        } 
       } 
      } 
     } 
+0

它是否多次输入'if(contentId == ...)'? –

+0

另外,什么是'帧[]'? –

+0

以及如果您不使用'POP_BACK_STACK_INCLUSIVE'会发生什么? –

回答

0

我觉得this可以帮助你。我前段时间遇到过这个问题,我找到了一个解决方案。

这不是图书馆,它是一个演示应用程序。如果结构是类似于Eclipse的 ,我很抱歉。我已经有一段时间了。