我有一个ListFragment,我使用自定义适配器来填充listview。一切顺利,直到我改变方向和滚动。然后它看起来像这样:
我猜这与我对视图持有者摸索有关,但我现在无法访问代码。
答案 0 :(得分:14)
重叠片段的原因是我使用了FrameLayout并使用FragmentTransition.add(...)添加了片段。当我将.add()更改为.replace()时,旧片段被删除,新片段被添加,我的问题解决了。
答案 1 :(得分:2)
我有类似的问题,根据我告诉解决方案: - 你得到这种模糊,因为每次在方向上改变时都会创建listfragment的新实例(可能是在oncreate()中),所以你必须只创建一个列表片段的实例,并且在方向更改时替换该片段而不是再加一次。
答案 2 :(得分:0)
更改方向会导致onCreate重新启动,除非您包含此方法
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
}
并将其放入清单的活动部分
android:configChanges="orientation"
答案 3 :(得分:0)
检查这是第一次调用onCreate(), 换句话说,确定回调是否不是由于屏幕旋转造成的。
protected void onCreate(Bundle savedInstanceState) {
if(savedInstanceState == null) {
// transition.add(Your fragment,...)
}
}
答案 4 :(得分:0)
我有同样的问题,因为FrameLayout的使用, 首先,您必须检查您的片段是否已添加到活动中:
String TagName = "F";
添加没有UI的片段如果您想稍后从活动中获取片段,则需要使用findFragmentByTag()。 "谷歌" http://developer.android.com/guide/components/fragments.html#Adding
Fragement F = getFragmentManager().findFragmentByTag(TagName);
然后检查
if(F == null) {
F = new F();
getFragmentManager()
.beginTransaction()
.add(R.id.container, F, TagName)
.commit();
}
此处的目标是避免添加或创建片段的新实例,该实例在配置更改期间持续存在,这会在将FrameLayout用作容器时导致问题。
解决方案2(简单): 你唯一需要做的就是将你的容器改为ex:LinearLayout,就是这样。但在我看来,由于片段的多个实例,这不是最好的解决方案。
希望得到这个帮助;