繁体   English   中英

如何在点击返回按钮时从一个片段中调用另一个片段?

[英]How to call another fragment from one fragment on hitting back button?

我的应用程序中有一个MainActivity ,从中可以使用Navigation Drawer调用所有片段。 活动的默认片段为“ A”。 因此,每次我打开应用程序时,都会调用“ A”片段。 当我从另一个片段B击中“返回”时,我想转到默认片段“ A”,就像gmail中发生的一样-如果我们击中任何片段,它将返回默认片段“主邮件”。

我尝试通过将以下代码添加到片段“ B”的onPause()中来调用“ A”片段。

@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:活动com.litchi.iguardian.MainActivity已泄漏窗口com.android.internal.policy.impl.PhoneWindow $ DecorView {41da6348 VE。 ... R ..... ID 0,0-513,243}最初是在此处添加的

正确的做法是什么?

当您按下后退按钮时,您应该自定义行为,因为默认情况下,它将破坏启动的活动,并且您会在回调从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(); 当您想通过按返回按钮返回上一个片段时。

返回上一个片段,请参见以下代码:

fragmentManager.popBackStack(...);

将此放在onBack事件中

调用popBackStack方法,首先需要在调用片段时调用addToBackStack方法

使用此代码

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();

无需在onPause()中编写该代码,您可以在您的主要活动的onBackPressed()中编写该代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM