我正在做的是一个 ListView。该 ListView 使用适配器来扩展仅包含一个 ViewPager 的 RelativeLayout。
在适配器的 getView 中,为 ViewPager 实例化自定义 PagerAdapter,并为 ViewPager 调用 .setAdapter。在调用 setAdapter 之后,我执行返回行或返回视图;这结束了 ListView 中该适配器的 getView 方法。
在我已经实现的 PagerAdapter
public Object instantiateItem(View collection, int position) {}
这基本上是为 Pager Adapter 设置子视图(页面)的内容。它会膨胀和设置所有子视图,然后将视图添加到集合中。
我认为问题在于,在行中完成返回后,PagerAdapter 还没有完成对子项的设置,所以 ListView 认为 ViewPager 是空的,并以这种方式将其绘制到屏幕上。我所做的基本上是我认为的黑客行为。
我尝试使用以下方法测量 instanceiteItem 中的第一个子视图:
view.measure(MeasureSpec.makeMeasureSpec(widthMeasureSpecSize, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(heightMeasureSpecSize, MeasureSpec.UNSPECIFIED));
((Pager) collection).requestedHeight = view.getMeasuredHeight();
值 heightMeasureSpecSize 实际上是在调用 .setAdapter 之前由 listView 适配器设置的公共属性。 ((Pager) 集合).requestedHeight 是我在扩展 ViewPager 本身时创建的另一个属性。在为其设置值之前,它默认为 100。然后我像这样覆盖了 onMeasure 方法:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
super.onMeasure(widthMeasureSpec, View.MeasureSpec.makeMeasureSpec(requestedHeight, View.MeasureSpec.AT_MOST));
}
使用所有这些代码,当我运行应用程序时,每当在 ViewPager 上调用 onMeasure 时,ListView 似乎都会将 ViewPager 添加到 100 的列表中,然后使用 onMeasure 重新计算并使用第一个孩子的 measureHeight 重绘项目查看寻呼机....
这一切都是因为 wrap_content 在 ViewPager 中被破坏了。有没有比这样做更好的方法?这似乎非常低效。