6

发生了什么:前两个 ViewPager 页面加载良好(ViewPager 自动从当前页面加载 +-1)。当您滚动过去时,不会显示下一页。下面问题的 GIF 演示。

调试信息:页面正在实例化(参见下面的代码)并成功添加到 ViewPager ArrayList<ItemInfo>mItems(通过日志消息确认)。我android.support.v4使用 debug=true 设置(mmm frameworks/support/v4/在 aosp 中)重新编译了库,它显示一切正常,除了:

ViewPager 中的 onLayout 和 onMeasure 方法在前两个视图加载后停止调用。这意味着其他页面是黑色的,因为它们从未按应有的方式进行测量和排列。我尝试在不同的点添加不同的 requestLayout() 调用以强制布局树刷新无济于事。

背景:我有一个通过 inflater.inflate 实例化的 ViewPager,并通过 view.findViewById(R.layouy.myid) 找到。它直接替换了旧的 Gallery 视图,出于测试目的,PagerAdapter instantiateItem(collection, position) 只是这样做:

@Override
public Object instantiateItem(View collection, final int position) {
    final TextView tv = new TextView(collection.getContext());
    tv.setText("Looking at page " + position);
    tv.setTextColor(Color.WHITE);
    tv.setBackgroundColor(Color.rgb( (int)(Math.random()*100), (int)(Math.random()*100), (int)(Math.random()*100)));
    tv.setTextSize(22);
    ((ViewPager) collection).addView(tv);
    return tv;
}

有任何想法吗?在我看来,PageView 的父母中的一些神秘设置以某种方式禁用了 onLayout PageView

4

1 回答 1

11

发现了我的问题。在我看来,有人在没有调用的情况下LinearLayout继承和覆盖了父级。requestLayout()super.requestLayout()

这打破了我的视图层次结构的刷新,并阻止了 onMeasure 和 onLayout 在我的 ViewPager 上被调用。在没有测量和布置页面的情况下,它们在 ViewPager 中显示为空白。

希望有一天这可以帮助其他人。我确实花了很长时间才弄清楚。

专业提示:android-sdk/tools/hierarchyviewer令人难以置信。谢谢安卓团队。每个人都应该至少运行一次它,它对于调试和设计任何 UI 都是非常宝贵的。

于 2012-07-30T20:36:26.403 回答