Android 在碎片上有奇怪行为的后退按钮

Android 在碎片上有奇怪行为的后退按钮,android,android-fragments,Android,Android Fragments,以下是我的导航: HomeFragment->LoginFragment->CreateEventFragment MyHomeFragment是我的MainActivity中的第一个片段 在我的代码中,我使用相同的视图id(在我的MainActivity的布局中的FrameLayout:R.id.container) 因此,每个replace()都被这样调用: FragmentManager fragmentManager = mContext.getSupportFragmentManage

以下是我的导航:

HomeFragment->LoginFragment->CreateEventFragment

My
HomeFragment
是我的
MainActivity
中的第一个片段

在我的代码中,我使用相同的视图
id
(在我的
MainActivity
的布局中的
FrameLayout
R.id.container

因此,每个
replace()
都被这样调用:

FragmentManager fragmentManager = mContext.getSupportFragmentManager();
fragmentManager.beginTransaction()
                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
                .replace(containerId, nextFragment).addToBackStack(null).commit();
除了
LoginFragment
CreateEventFragment
,因为用户登录后不必返回
LoginFragment
,所以我不调用
addToBackStack()

但奇怪的事情正在发生: 当我在
CreateEventFragment
上时,在成功登录并按下后退按钮后,我的
CreateEventFragment
onDestroy()
不会被调用

调试它我注意到它没有从
backbackback
中删除,我做错了什么

编辑

一些代码:

公共替换片段方法,在
BaseFragment
内部,所有三个
fragment
的父类

public void replaceFragment(int containerId, Fragment nextFragment, boolean addToBackStack){
    FragmentManager fragmentManager = mContext.getSupportFragmentManager();
    if (addToBackStack)
        fragmentManager.beginTransaction()
                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
                .replace(containerId, nextFragment).addToBackStack(null).commit();
    else
        fragmentManager.beginTransaction()
                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
                .replace(containerId, nextFragment).commit();
}
HomeFragment
上:

BaseFragment nextFragment =
            (PreferencesHandler.isLogged()) ?
                CreateEventFragment.newInstance() :
                LoginFragment.newInstance("create_event") ;
replaceFragment(R.id.main_fragment_container, nextFragment, true);
public void goToNextFragment(){
    Fragment nextFragment;
    switch (mIntent){
        case "create_event":
            nextFragment = new CreateEventFragment();
            break;
        case "participate":
            nextFragment = new ListsFragment();
            break;
        default:
            nextFragment = new HomeFragment();
            break;
    }
    replaceFragment(R.id.main_fragment_container, nextFragment, false);
}
在登录片段上:

BaseFragment nextFragment =
            (PreferencesHandler.isLogged()) ?
                CreateEventFragment.newInstance() :
                LoginFragment.newInstance("create_event") ;
replaceFragment(R.id.main_fragment_container, nextFragment, true);
public void goToNextFragment(){
    Fragment nextFragment;
    switch (mIntent){
        case "create_event":
            nextFragment = new CreateEventFragment();
            break;
        case "participate":
            nextFragment = new ListsFragment();
            break;
        default:
            nextFragment = new HomeFragment();
            break;
    }
    replaceFragment(R.id.main_fragment_container, nextFragment, false);
}
我的
main活动的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include
        android:id="@+id/toolbar_actionbar"
        layout="@layout/toolbar_actionbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:layout_below="@+id/toolbar_actionbar"
        tools:context=".MainActivity">

        <FrameLayout
            android:id="@+id/main_fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/toolbar_actionbar"
            />

        <fragment android:id="@+id/navigation_drawer"
            android:layout_width="@dimen/navigation_drawer_width"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:name="Fragments.`NavigationDrawerFragment`"
            tools:layout="@layout/fragment_navigation_drawer" />

    </android.support.v4.widget.DrawerLayout>
</RelativeLayout>

编辑2


注意到按back按钮调用的是
LoginFragment
onDestroy
,而不是
CreateFragment
。还注意到backStack有
LoginFragment
,我猜不应该,对吗?

您是否覆盖了onBack来执行backStack。pop?不,甚至在我的活动中没有
onBackPressed()
,但是我应该覆盖它吗?如果您不想在后堆栈中使用它,那么就不要使用
。addToBackStack(null)
当您进行替换时。这就是我对我的问题所说的。问题是,在按下
CreateEventFragment
后,它没有被销毁。您是否覆盖了onBack以执行backbackback.pop?不,甚至不是我的活动中的
onBackPressed()
,但我应该覆盖它吗?如果您不希望它在后堆栈中,请不要使用
.addToBackStack(null)
当您进行替换时。这就是我对我的问题所说的。问题是,在按下
CreateEventFragment
后,它没有被销毁。您是否覆盖了onBack以执行backbackback.pop?不,甚至不是我的活动中的
onBackPressed()
,但我应该覆盖它吗?如果您不希望它在后堆栈中,请不要使用
.addToBackStack(null)
当您进行替换时。这就是我对我的问题所说的。问题是,在按下
CreateEventFragment
后,它没有被销毁