民众 -
我正在尝试实现一个显示图像ArrayList的Gallery小部件,我已经开始使用开发站点上的Hello, Gallery example。这一部分都很有效。
我需要让图库显示一个空视图(ArrayList没有内容时的特殊视图),但我似乎无法让Gallery执行此操作。我以前使用ListView和其他AdapterViews做过这个,但我不能让它与Gallery一起使用。我需要在Adapter,Gallery或两者中覆盖/实现什么才能显示空视图?这是我的适配器代码:
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
private ArrayList<Drawable> images;
public ImageAdapter(Context c) {
mContext = c;
TypedArray a = c.obtainStyledAttributes(R.styleable.Gallery1);
mGalleryItemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);
a.recycle();
images = new ArrayList<Drawable>();
}
public void addImage(Drawable d) {
images.add(d);
}
public boolean isEmpty() {
return getCount() == 0;
}
public int getCount() {
return images.size();
}
public Drawable getItem(int position) {
return images.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View contentView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
i.setImageDrawable(images.get(position));
i.setLayoutParams(new Gallery.LayoutParams(160, 120));
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setBackgroundResource(mGalleryItemBackground);
return i;
}
}
当要使用空ArrayList显示视图时,getCount()会被调用(返回0),但是Gallery永远不会检查isEmpty,当我在Gallery中定义getEmptyView()
时,它永远不会叫做。我是否错过了BaseAdapter中另一个必需的方法来正确通知空状态?
谢谢!
答案 0 :(得分:1)
在本文的帮助下,我找到了答案:
Correct use of setEmtpyView in AdapterView
问题的关键在于(一旦我使用附录信息使Gallery / AdapterView正确调用空状态检查),AdapterView仅用于在内容和空视图之间切换视图可见性设置(交换视图。 GONE和View.VISIBLE)。因此,如果您没有在父布局中正确创建和布置内容和空视图,则它们将无法正常显示。
在可能的情况下,我以编程方式创建了空视图(只是一个TextView)并使用setEmptyView()
将它附加到适配器视图。 TextView从未附加到表示Activity的LinearLayout,因此即使在AdapterView之后它也没有显示,所以请将它设置为View.VISIBLE。