如何在击退按钮时从一个片段调用另一个片段?

时间:2015-01-14 07:18:46

标签: java android android-fragments

我的应用程序中有 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}最初添加在这里

这样做的正确方法是什么?

4 个答案:

答案 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()中编写该代码。