Android popbackstack之后不可见片段
我在Android popbackstack之后不可见片段,android,android-fragments,fragmentmanager,fragment-backstack,Android,Android Fragments,Fragmentmanager,Fragment Backstack,我在Activity.onCreate()中添加片段(主片段),而不将其添加到backstack中,我使用FragmentTransaction.replace()进行添加。之后,我使用FragmentTransaction.replace()添加下一个片段,并将其添加到backstack 我有一个清除backstack的功能,使主片段可见,为此,我使用FragmentManager.popBackStack(null,FragmentManager.POP\u BACK\u STACK,包括n
Activity.onCreate()
中添加片段(主片段),而不将其添加到backstack中,我使用FragmentTransaction.replace()
进行添加。之后,我使用FragmentTransaction.replace()
添加下一个片段,并将其添加到backstack
我有一个清除backstack的功能,使主片段可见,为此,我使用FragmentManager.popBackStack(null,FragmentManager.POP\u BACK\u STACK,包括null)代码>
如果我只向backback添加一个片段,然后清除backbackback,那么效果很好,但是如果我添加多个片段,那么在清除backbackback后,屏幕是空白的,虽然主片段接收onStart()和onResume(),并认为它是可见的,但它不会接收onPause(),onStop(),直到我再次添加另一个片段或离开应用程序。
另外,如果IpopBackstack()
一个接一个(在用户操作上)它工作正常,但是如果IpopBackstack()
在循环中(一次弹出所有片段),它就不工作
代码如下:
public void changeFragment(BaseFragment fragment, boolean addToBackStack, boolean preventDuplicate) {
Fragment topFragment = getSupportFragmentManager().findFragmentById(fragmentContainer.getId());
if (preventDuplicate && topFragment != null && fragment.getClass().equals(topFragment.getClass())) {
//Prevent adding same fragment
return;
}
FragmentTransaction transaction =
fragmentManager
.beginTransaction()
.replace(fragmentContainer.getId(), fragment);
if (addToBackStack) {
transaction.addToBackStack(null);
}
transaction.commit();
}
public void goToHome() {
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
新的支持库版本把事情搞砸了。更换后
compile 'com.android.support:appcompat-v7:25.1.1'
回到
compile 'com.android.support:appcompat-v7:25.0.1'
一切正常有一种新的FragmentTransaction方法(在版本25.1.0中添加)请参见:
尝试在FragmentTransaction上设置此选项,同时:
final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setAllowOptimization(true);
transaction.replace(...);
这为我解决了这个问题
归功于:尝试fragmentManager.popbackimmediate()。你确定你没有在代码中更改任何内容吗?不是100%,但我很确定我没有更改任何其他内容。