ViewPager未被绘制

时间:2014-12-17 21:39:41

标签: android

我有一个应用程序使用Activity with ActionBar选项卡,ViewPager和FragmentPagerAdapter,在定位v14并使用本机Activity和Fragment类时工作正常。最近我使用AppCompat主题将其更新为目标v21,并且必须将其修改为ActionBarActivity以及Fragment和相关类的support.v4版本。现在,虽然它内部似乎正在工作,包括切换标签,但它在屏幕上的区域仍然是空白的。

设置断点,我的所有碎片'生命周期覆盖方法的调用完全符合预期,包括通过点击或在屏幕上滑动来切换标签。我的一个片段使用自定义视图,我看到的是虽然视图是正常创建的,但它的绘图方法 - onMeasure和onDraw - 从不被称为。就像ViewPager在不绘制视图的情况下切换视图一样!

在断点处深入挖掘,我检查了ViewPager结构,所有这些似乎都是我所期望的:我的片段在其分页对象数组中,并且当前选项卡集的视图层次结构在其中子视图数组。高度和宽度也是我所期望的。

可能会有什么遗漏,这将是"工作" - 包括滑动手势 - 除了在屏幕上实际绘制视图的步骤之外?


更新: 我使用原生片段,v4 ViewPager和v13 FragmentPageAdapter恢复了我的原始代码,但删除了ActionBar选项卡和相关类,只是为了将其从图片中删除。这一切都很完美,因为它始终与Theme.Holo主题。

然后我做了简单的"更改为使用对Fragment及相关类的v4支持以及FragmentPageAdapter所需的v4版本。这给了我一个空白的屏幕,我的片段应该显示在那里,我再次能够跟随ViewPager回调并在视图之间滑动。

因此,它与ActionBar选项卡无关,也与AppCompat主题无关。我的片段或观点不会有任何问题,因为这些都没有改变。

1 个答案:

答案 0 :(得分:0)

我发现了自己的错误。很久以前,当我编写片段代码时,我放入了自己的getView()方法,不知道我是否覆盖了Fragment超类中的方法。当使用本机片段时,这是有效的,因为我返回的片段根视图与Fragment一样。然而,片段的support.v4实现显然将onCreateView返回的视图包含在其自己创建的特殊FrameLayout中,这就是它的getView返回的内容。因此,通过覆盖它,我返回的视图与ViewPager看到的视图不匹配,并且事情快速崩溃。

删除我的getView方法 - 这首先是多余的 - 立即解决了问题。