返回上一个活动,阻止返回初始活动

时间:2017-03-05 17:02:57

标签: java android android-fragments

我试图实施一种共同行为(我认为)。

我有2项活动: LoginActivityMainActity

MainActiviy包含一个包含3个片段的菜单,可以浏览它们:RequestFragmentDetailFragmentVisualizationFragment

但是,我还有一个问题尚未解决:

第一个,如果流程类似于: LoginActivity - > MainActivity - > RequestFragment - > DetailFragment 而且,你可以导航 LoginActivity - > MainActivity - > VisualizationFragment

但有一次,你被记录下来,从流程中移除LoginActivity,刚才我正在使用:

LoginActivity

protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_login);
   //...some extra code...

   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
//..start the activity

}

好的,这工作正常,但在MainActivity我有问题: 的 MainActivity

@Override
    public void onBackPressed() {
        if (getFragmentManager().getBackStackEntryCount() > 0) {
            getFragmentManager().popBackStack();
        } else {
            super.onBackPressed();
        }
    }

考虑到我的MainActivity中有一个菜单替换了我的片段中的一个菜单,当MainActivity打开时我如何在我的应用程序中导航关闭应用程序(这很自然)当显示Fragment时,回到上一个?

刚才,我的代码没有通过片段导航做任何事情,它在MainActivity开放的情况下全部开放,而没有考虑fragments

1 个答案:

答案 0 :(得分:0)

使用如下所示的反向代码。如果它遇到最后一个片段,我会显示警告框。

@Override
    public void onBackPressed() {
        if (getFragmentManager().getBackStackEntryCount() > 0) {
            showAlertDialog(Constants.EXIT_APP, Constants.APP_NAME);
        } else {
            getFragmentManager().popBackStackImmediate();
        }
    }

//添加此方法进行导航。写入一个常见的java文件

public void showFragment(Fragment fragment, String back_stack_name, boolean save_back) {
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        transaction.replace(R.id.container, fragment);
        if(save_back) {
            transaction.addToBackStack(back_stack_name);
        }
        transaction.commit();
    }

//在任何需要片段的地方调用此方法:

Classname obj = new Classname();
showFragment(obj,"FRAGMENT_NAME_IN_STRING",true);

注意:如果要将片段添加到backstack,请将3rd参数设置为true,否则设置为false。 与调用类的Intent一样,showFragment用于调用片段。