正在发生的事情: 前两个ViewPager页面已经很好地加载了(ViewPager会自动加载当前页面前后+-1的页面)。当你滚动到这些页面之后,下一个页面没有显示出来。问题的GIF演示如下。
调试信息: 页面已经被实例化(见下面的代码),并已成功添加到ViewPager的
在第一次加载了两个视图之后,ViewPager中的onLayout和onMeasure方法停止被调用。这意味着其他页面是黑色的,因为它们从未被测量&排列过。我尝试在不同的点添加不同的requestLayout()调用来强制刷新布局树,但都没有成功。 背景: 我通过inflater.inflate进行实例化的ViewPager,在view.findViewById(R.layouy.myid)中找到。它直接替换了旧的Gallery视图,并且为了测试目的,PagerAdapter的instantiateItem(collection, position)只是做了这个:
有什么想法吗?在我看来,PageView的父级中的某些神秘设置可能会禁用onLayout PageView。
ArrayList<ItemInfo>mItems
中(通过日志消息确认)。我重新编译了启用debug=true的android.support.v4
库(在aosp中执行 mmm frameworks/support/v4/
),它展示了除以下情况外一切正常:在第一次加载了两个视图之后,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。
destroyItem
吗?http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#destroyItem(android.view.ViewGroup, int, java.lang.Object) - Salil PanditdestroyItem(View c, int p, Object v) {((ViewPager)c).removeView((View)v); }
,在我的测试应用程序中它完美地工作。 - Tim O'Brien