我有一个 ListFragment,我在其中使用自定义适配器来填充列表视图。一切都很好,直到我改变方向和滚动。然后它看起来像这样:
我猜这与我摸索视图持有者有关,但我现在无法访问代码。
我有一个 ListFragment,我在其中使用自定义适配器来填充列表视图。一切都很好,直到我改变方向和滚动。然后它看起来像这样:
我猜这与我摸索视图持有者有关,但我现在无法访问代码。
重叠片段的原因是我使用了 FrameLayout 并使用 FragmentTransition.add(...) 添加了片段。当我将 .add() 更改为 .replace() 时,旧片段被删除并添加了新片段,我的问题就解决了。
我有类似的问题,据此我正在告诉解决方案:-您得到了这种模糊,因为每次在方向更改时都会在某个地方创建新的 listfragment 实例(可能是在 oncreate() 中),因此您必须只做列表片段的实例一次并且在方向更改时替换该片段而不是再次添加。
除非您包含此方法,否则更改方向会导致 onCreate 重新启动
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
}
并将其放在清单的活动部分
android:configChanges="orientation"
检查这是第一次调用 onCreate(),换句话说,确定回调是否不是由于屏幕旋转。
protected void onCreate(Bundle savedInstanceState) {
if(savedInstanceState == null) {
// transition.add(Your fragment,...)
}
}
我有同样的问题,它是因为 FrameLayout 的使用,首先你必须检查你的片段是否已经添加到活动中:
String TagName = "F";
添加没有 UI的 Fragment 如果以后想从 Activity 中获取 Fragment,则需要使用 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 ,仅此而已。但在我看来,这不是最好的解决方案,因为片段有多个实例。
希望这有帮助;