android - 使用抽屉导航处理 fragment 返回堆栈

标签 android android-fragments

我正在实现抽屉导航并且运行良好。所以我在点击抽屉导航时调用 fragment ,它也在工作,而且我从主页 fragment 调用另一个 fragment 并维护每个 fragment 的返回堆栈,但问题是从我无法去的子 fragment 中按下主页 fragment ,刚刚退出应用程序。我不想要这个。我想要什么 点击

Navigation Drawer->HomePageFragment->AnotherChild Fragment(On List Item click of HomePageFragment)

但是在没有进入 Homepage fragment 的情况下按下后退直接退出应用程序。这是我的代码:(在带抽屉导航的 fragment Activity 中)

class SlideitemListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {

        updateDisplay(position);
    }

}

private void updateDisplay(int position) {
    Fragment fragment = null;
    switch (position) {
    case 0:
        fragment = new ScheduleFragment();
        break;
    case 1:
        fragment = new Result_Fragment();
        break;
    case 2:
        fragment = new Live_Match_Fragment();
        break;
    case 3:
        // fragment = new Live_Match_Fragment();
        break;

    case 4:
        fragment = new Team_Fragment();
        break;
    default:
        break;
    }

    if (fragment != null) {

        fragmentManager = getFragmentManager();
        fragmentManager.popBackStackImmediate("0", 0);
        int count = fragmentManager.getBackStackEntryCount();
        FragmentTransaction fragmentTransaction = fragmentManager
                .beginTransaction();
        fragmentTransaction.replace(R.id.frame_container, fragment)
                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                .addToBackStack(String.valueOf(count)).commit();
        Log.e("Count in Activiy", ""+count);

        // update selected item and title, then close the drawer
        setTitle(menutitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }

}

现在在 FragmentActivity 中的 BackPressed() 中。

@Override
public void onBackPressed() {
    if (fragmentManager.getBackStackEntryCount() <= 1) {
        finish();

        return;
    }
    super.onBackPressed();
}

现在在 Listview 项点击时从 HomePage fragment 调用另一个子 fragment 。

 team_lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            TeamDetailFragment myDetailFragment = new TeamDetailFragment();
            FragmentManager fragmentManager = getFragmentManager();
            int count = fragmentManager.getBackStackEntryCount();
            Log.e("Count in Fragment", "" + count);
            FragmentTransaction fragmentTransaction = fragmentManager
                    .beginTransaction();
            fragmentTransaction
                    .replace(R.id.frame_container, myDetailFragment)
                    .setTransition(
                            FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .addToBackStack(String.valueOf(count)).commit();

        }
    });

所以有人知道然后帮助我。帮助将不胜感激。

最佳答案

android 中的嵌套 fragment 存在问题 https://code.google.com/p/android/issues/detail?id=40323

如果事务在嵌套的 fragment 中,Android 就不能很好地处理回按。 为了超越这个,我在我的 Activity 中使用了以下修复

@Override
public void onBackPressed() {
    // If the fragment exists and has some back-stack entry
    if (myFragment != null && myFragment.getChildFragmentManager().getBackStackEntryCount() > 0) {
        // Get the fragment fragment manager - and pop the backstack
        myFragment.getChildFragmentManager().popBackStack();
    }
    // Else, nothing in the direct fragment back stack
    else {
        // Let super handle the back press
        super.onBackPressed();
    }
}

关于android - 使用抽屉导航处理 fragment 返回堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23293245/

相关文章:

android - 在 AndEngine 中重复 n 次的时间处理器

android - 如何从 ViewPager 中的不同 fragment 制作工具栏中的单击按钮?

android - 在 Android 上使用 simplexml 将 xml 字符串转换为对象给出 ParseError (AttributePrefixUnbound)

android - recyclerView.addOnScrollListener - "retrofit pagination with MVVM"正在加载相同的响应/列表

添加 WebViewClient 时,Android WebView 忽略目标 ="_blank"

android - Android布局中的自定义形状按钮

android - FragmentManager 已经在执行 Android 事务

android - 使用 Robotium 检查 fragment 是否存在 - Android

android - 通过 onClickListener 按自定义适配器中的位置获取数据

android - 带有兼容包的 fragment 和 > hive