如何通过按后退按钮从任何片段进入根活动?

时间:2016-05-05 23:48:50

标签: java android

我有一个使用库https://github.com/mikepenz/MaterialDrawer

构建的导航抽屉的活动

我想从导航抽屉中选择4个不同的项目来加载4个不同的页面。

我决定在导航抽屉中为每个项目使用片段,因此当按下任何项目时,会创建该选项的新片段并显示给用户。

我想要的是,无论用户当前处于哪个片段,或者他来自哪个片段,每当他按下后退按钮时,他都会返回原始活动。

这是我到目前为止的代码,但显然Fragment Backstack没有更新。

result = new DrawerBuilder().withSelectedItem(-1)
                .withActivity(this)
                .withToolbar(toolbar)
                .withAccountHeader(headerResult)
                .addDrawerItems(
                        item1,item2,item3,item4
                )
                .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
                    @Override
                    public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
                        result.setSelection(position,false);
                        clearStack();
                        switch (position) {
                            case 1:
                                fragment = new admin_fragment_data_entry();
                                break;
                            case 2:
                                fragment = new admin_fragment_data_edit();
                                break;
                            case 3:
                                break;
                            case 4:
                                break;
                        }
                        initiateFragment();
                        return false;
                    }
                }
                )
                .build();


    @Override
    public void onBackPressed() {

        int count = getFragmentManager().getBackStackEntryCount();

        //handle the back press :D close the drawer first and if the drawer is closed close the activity
        if (result != null && result.isDrawerOpen()) {
            result.closeDrawer();
        }
        else if (count == 0) {
            super.onBackPressed();
            //additional code
        }
        else {
            getFragmentManager().popBackStack();
        }


    }

    private void initiateFragment(){
        if (fragment != null) {


            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.addToBackStack(null);
            ft.replace(R.id.container_body, fragment);
            ft.commit();
        }
    }

    private void clearStack(){
        int count = getFragmentManager().getBackStackEntryCount();
        while(count > 0){
            getFragmentManager().popBackStack();
            count--;
        }
    }

任何帮助都将受到高度赞赏。

另外,我应该在这里使用片段吗?或者我应该从导航抽屉中为4种不同的选项开始4种不同的活动?

1 个答案:

答案 0 :(得分:0)

您是否使用正确的片段管理器来计算背斜堆?

我注意到你班级的其他部分你正在使用getSupportFragmentManager。