我知道我们在android中有后退按钮可以将我们移回到上一个表单上,但是我的团队负责人要求在按钮上单击后退按钮功能
我怎样才能做到这一点?
在管理Fragments时,我在应用程序中遇到了一些奇怪的行为,我想知道是否可以帮助解释为什么会发生这种情况.
我有两个片段,我们将它们称为片段A和片段B.我的应用程序的一般流程是当用户以某种方式与片段A交互时,片段B通过调用显示fragmentTransaction.replace()(这在所有情况下都会发生).当我显示片段B时,我将片段A添加到后栈; 然后,当用户按下片段B上的后退按钮时,片段A将通过从后面的堆栈弹出再次显示.
这一切都很好,但今天我发现有一个来自Fragment B的流调用fragmentTransaction.replace(),用当前在后栈上的Fragment A的相同实例替换Fragment B.
本身并没有什么不妥,但是当我从片段A回到片段B时会出现奇怪的行为.如果我打电话fragmentTransaction.replace(),onCreate()片段B 的方法就不会被调用.
但是,如果我从后面的堆栈弹出Fragment A然后用Fragment B替换它,则会释放Fragment B的onCreate()方法.为什么是这样?
请注意,片段A和片段B的所有实例都是在其主机活动启动时创建的.
编辑以澄清.onCreate()第二次调用的情况如下:将片段A =>替换为片段B,将片段A添加到后栈=> pop片段A使用popBackStack()=>将片段A再次替换为片段B.
我有Activity托管的带有片段的幻灯片菜单,当用户点击slidemenu片段中的任何项目时,我需要处理后退导航
当用户点击列表中的项目时,我调用此方法来显示正确的片段
public void SelectItem(int position) {
Fragment _fragment = null;
switch (position) {
case 0:
_fragment = Test_Home.newInstance();
break;
case 1:
_fragment = Diseases_Fragment.newInstance();
break;
........
case 8:
Logout();
break;
default:
break;
}
if (_fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.view_content, _fragment).addToBackStack(null).commit();
// set title , this textview in toolbar
_frag_title.setText(nav_items[position]);
mDrawerLayout.closeDrawer(GravityCompat.START);
}
Run Code Online (Sandbox Code Playgroud)
这个方法处理后退按钮
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
Run Code Online (Sandbox Code Playgroud)
我的onCreate方法
@Override
protected void onCreate(Bundle savedInstanceState) …Run Code Online (Sandbox Code Playgroud)