为什么我的ViewPager子项宽高为零?

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;
}

当设置布局中有ImageView控件的R.layout.imageview为背景时,它并没有起作用。将背景颜色设置为任意可见值可以显示视图实际上是不可见的。发生了什么事情?


三星Galaxy S3运行Jellybean系统,顺便提一下。 - Andrew Wyld
你解决了吗? - Behzad Shirani
1个回答

1
返回的对象不应该是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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接