我试图实施一种共同行为(我认为)。
我有2项活动:
LoginActivity
和MainActity
。
MainActiviy
包含一个包含3个片段的菜单,可以浏览它们:RequestFragment
,DetailFragment
和VisualizationFragment
。
但是,我还有一个问题尚未解决:
第一个,如果流程类似于:
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
答案 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用于调用片段。