3

我正在制作一个 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只是一个带有ImageViewin 的布局)不起作用。将背景颜色设置为任意可见值表明视图本质上是不可见的。这是怎么回事?

4

1 回答 1

1

返回的对象不应该是View,而是用来标识的对象View。在这种情况下,位置被用作索引,所以返回值应该是位置:

@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;
}
于 2013-07-09T17:59:52.323 回答