我的应用程序中有 MainActivity ,使用导航抽屉调用所有片段。活动的默认片段是“A'”。因此每次我打开应用程序时,' A'片段被调用。当我回到'从另一个片段B,我想得到默认片段' A',就像gmail中发生的那样 - 如果我们回击它,它会返回到默认片段"主邮件"。
我试着打电话给' A'片段通过将以下代码添加到片段' B'的 onPause()。
@Override
public void onPause() {
super.onPause();
fragment = new A();
FragmentTransaction fragTransaction = getFragmentManager().beginTransaction();
fragTransaction.replace(R.id.a,fragment ).commit();
}
但是当我回击时,片段' A'被叫了一会儿,然后应用程序意外关闭。
Logcat:
01-14 12:44:42.264:E / WindowManager(4655):android.view.WindowLeaked:Activity com.litchi.iguardian.MainActivity泄露了窗口com.android.internal.policy.impl.PhoneWindow $ DecorView { 41da6348 VE .... R ..... ID 0,0-513,243}最初添加在这里
这样做的正确方法是什么?
答案 0 :(得分:0)
您应该在按下后退按钮时自定义行为,因为默认情况下它会销毁已启动的活动,并且当回调从onPause()
转到onStop()
并且您无法看到活动时,您会看到您的片段了。只需覆盖此方法,就必须解决问题:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// your code
return true;
}
return super.onKeyDown(keyCode, event);
}
但是,是的,它用于全局控制,对于切换片段,当你想通过按下后退按钮返回前一个片段时,你也可以调用addToBackStack();
。
答案 1 :(得分:0)
返回上一个片段,见下面的代码:
fragmentManager.popBackStack(...);
把它放在onBack事件中
调用popBackStack方法首先需要在调用片段时调用addToBackStack方法
答案 2 :(得分:0)
使用此代码
android.support.v4.app.Fragment detail = new CurrentClass();
detail.setArguments(bundle);
android.support.v4.app.FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.add(R.id.content_frame, detail).addToBackStack("back")
.commit();
答案 3 :(得分:0)
而不是在onPause()中编写该代码,您可以在主要活动的onBackPressed()中编写该代码。