如何在onBackPressed中实现findFragmentById以查找HomeFragment

问题描述:

我正在处理导航抽屉布局中的碎片。每次在frame_container中看到任何其他片段时,我都要按回按钮返回HomeFragment。如果主页片段已经可见,我想完成MainActivity(navigation_drawer_activity)。帮助我纠正主要活动中的OnBackPressed代码。如何在onBackPressed中实现findFragmentById以查找HomeFragment

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } 

    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_home); 
    if(fragment!=null && fragment.isVisible()){ 
     clearBackStack(); 
     finish(); 
    }else { 
     clearBackStack(); 
     getSupportFragmentManager().beginTransaction().replace(R.id.frame_container,new HomeFragment()).commit(); 
    } 

} 
+0

您是否使用ViewPager来管理您的频道? – RRTW

+0

没有使用框架布局.. –

+0

和片段管理器。 –

这里是解决方案。我发现了frame_container的片段。 然后检查是否有语句。 if(fragment!=null && fragment instanceof HomeFragment && fragment.isVisible())。这返回home_fragment。 感谢您的回答。

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } 

    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frame_container); 
    if(fragment!=null && fragment instanceof HomeFragment && fragment.isVisible()){ 
     clearBackStack(); 
     finish(); 
    }else { 
     clearBackStack(); 
     getSupportFragmentManager().beginTransaction().replace(R.id.frame_container,new HomeFragment()).commit(); 
    } 

} 

试试这个

@Override 
    public void onBackPressed() { 
     FragmentManager fm = getSupportFragmentManager(); 
     if (drawerLayout.isDrawerOpen(GravityCompat.START)) { 
      drawerLayout.closeDrawer(GravityCompat.START); 
     } else if (fm.getBackStackEntryCount() > 0) { 
      Log.i("MainActivity", "popping backstack"); 
      getSupportFragmentManager().popBackStackImmediate(); 
     } else { 
      Log.i("MainActivity", "nothing on backstack, calling super"); 
      super.onBackPressed(); 
     } 
    } 
+0

这返回当前片段。并在每次我按下时完成活动。 –

+0

您是否在更换碎片时使用了addToBackStack? –

+0

实际上我不想通过整个backstack按回来迭代。我只想直接进入家庭片段。 –