在Android图库中显示空视图

时间:2010-08-04 18:37:03

标签: android gallery

民众 -

我正在尝试实现一个显示图像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中另一个必需的方法来正确通知空状态?

谢谢!

1 个答案:

答案 0 :(得分:1)

在本文的帮助下,我找到了答案:

Correct use of setEmtpyView in AdapterView

问题的关键在于(一旦我使用附录信息使Gallery / AdapterView正确调用空状态检查),AdapterView仅用于在内容和空视图之间切换视图可见性设置(交换视图。 GONE和View.VISIBLE)。因此,如果您没有在父布局中正确创建和布置内容和空视图,则它们将无法正常显示。

在可能的情况下,我以编程方式创建了空视图(只是一个TextView)并使用setEmptyView()将它附加到适配器视图。 TextView从未附加到表示Activity的LinearLayout,因此即使在AdapterView之后它也没有显示,所以请将它设置为View.VISIBLE。