【问题标题】:how to implement findFragmentById in onBackPressed to find HomeFragment如何在 onBackPressed 中实现 findFragmentById 来查找 HomeFragment
【发布时间】:2017-10-13 05:41:49
【问题描述】:

我正在使用导航抽屉布局中的片段。每次在 frame_container 中看到任何其他片段时,我都想在按下后退按钮时返回 HomeFragment。如果主页片段已经可见,我想完成 MainActivity(navigation_drawer_activity)。帮我更正主要活动中的 OnBackPressed 代码。

 @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();
    }

}

【问题讨论】:

  • 您是否使用 ViewPager 来管理您的片段?
  • 没有使用框架布局..
  • 和片段管理器。

标签: android android-fragments navigation-drawer


【解决方案1】:

这里是解决方案。我从frame_container 中找到了片段。 然后签入 if 语句。 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();
    }

}

【讨论】:

    【解决方案2】:

    试试这个

     @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();
            }
        }
    

    【讨论】:

    • 返回当前片段。并在我每次按下后完成活动。
    • 你在替换片段时使用过 addToBackStack 吗?
    • 实际上我不想在按回时遍历整个后台堆栈。我只想直接进入首页片段。
    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 2013-09-03
    • 2014-12-07
    • 2015-06-10
    相关资源
    最近更新 更多