为什么我的ViewPager有宽度和高度为零的子节点?

时间:2013-07-09 17:55:20

标签: android android-viewpager android-pageradapter

我正在制作一个ViewPager来显示一系列图像,这些图像由它们在资源值数组中的位置来标识。这是适配器的instantiateItem代码:

//indexes the images
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0.getTag().equals(arg1);
}

//serves the views
@Override
public Object instantiateItem(ViewGroup container, int position) {
    ImageView view = new ImageView(container.getContext());
    view.setScaleType(ScaleType.FIT_CENTER);
    view.setTag(position);
    view.setImageResource(mImages.get(position));
    container.addView(view, position);
    return view;
}

不显示。查看container.getChildAt(0)确认布局参数设置为MATCH_PARENT但宽度和高度为0.容器自身的宽度和高度是屏幕尺寸(如预期的那样)。

将代码更改为

@Override
public Object instantiateItem(ViewGroup container, int position) {
    ImageView view = (ImageView) View.inflate(container.getContext(), R.layout.imageview, null);
    view.setScaleType(ScaleType.FIT_CENTER);
    view.setTag(position);
    view.setImageResource(mImages.get(position));
    container.addView(view, position);
    return view;
}

(其中R.layout.imageview只是一个ImageView in的布局)不起作用。将背景颜色设置为任意可见值表示视图基本上不可见。发生了什么事?

1 个答案:

答案 0 :(得分:0)

返回的对象不应该是View,而是用于识别 View的对象。在这种情况下,该位置被用作索引,因此返回值应为position:

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0.getTag().equals(arg1);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    ImageView view = new ImageView(container.getContext());
    view.setScaleType(ScaleType.FIT_CENTER);
    view.setTag(position);
    view.setImageResource(mImages.get(position));
    container.addView(view, position);
    return position;
}