我有一个奇怪的问题,让我生气!SupportFragmentManager,popbackstack和屏幕旋转
场景:
我有Activity
A作为发射Activity
和Activity
B可被通过Intent
在Activity A
Activity A --> Activity B
活动B开始具有初始Fragment
呼叫它Fragment
C中,它是在Activity
B中例示如下:
if(getSupportFragmentManager().findFragmentByTag(FragmentC.TAG) == null) {
getSupportFragmentManager()
.beginTransaction()
.add(R.id.container,
FragmentC.newInstance(null), // optional bundle
FragmentC.TAG)
.commit();
}
在Fragment
CI具有在ViewHolder
这要求通过Fragment
C.回到托管Activity
乙此时的OnClickListener
一个RecyclerView
我开始FragmentTransaction
(在Activity
B)来替换当前Fragment
C,称之为Fragment
d和我这个交易添加到堆栈中:
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(
R.anim.fragment_slide_enter,
R.anim.fragment_slide_exit,
R.anim.fragment_slide_enter_pop,
R.anim.fragment_slide_exit_pop)
.replace(R.id.container,
FragmentD.newInstance(bundle),
FragmentD.TAG)
.addToBackStack(null)
.commit();
因此,在这一点上我有Activity
B带Fragment
d从Fragment
C到Fragment
d在后面堆栈中的交易,处理的背衬像这样:
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
导航工作正常向前或向后移动,从开始Actvity
A,通过对Activity
乙 - >Fragment
d和背部。
问题:
但是,如果我在Fragment
d和旋转屏幕,然后pop
返回堆栈去Fragment
C(取消交易),我看到一个空白的Fragment
。更奇怪的是,所有Fragment
C的生命周期方法OnCreate()
,OnCreateView()
,OnActivityCreated()
被调用,并且我有有效的数据/对象(通过设置断点检查)。
奇怪但是,如果我从Fragment
Ç打算时做一个add
交易 - >Fragment
d,显然两者都同时在彼此的顶部显示,我旋转屏幕,按回,并删除事务有没有问题,显然不是一个解决方案,只是一个观察。
我已经搜索过,但我已阅读并尝试过的所有内容都不起作用。我已经实施了类似的事情,这工作正常,但我在这里挣扎 - 任何帮助将不胜感激。
编辑
如果应用goies进入暂停状态(单独留在家中和屏幕熄灭),然后再次唤醒,恢复,片段显示为它应该。我没有在onResume
初始化,所以我不知道为什么这个工程。
单独的'Fragments'和托管'Activity'处理配置更改没有问题。 –
对于活动,您可以在清单文件中定义Configchanges属性。和片段,你可以重写onConfigurationChanged()方法就像我在解决方案中解释,让我知道如果你面临的问题 – NishchalAndroid
你解决了你的问题? – NishchalAndroid