Показать пустой вид в галерее Android - PullRequest
3 голосов
/ 04 августа 2010

Народ -

Я пытаюсь реализовать виджет Галерея, который отображает ArrayList изображений, и я начал с Hello, пример галереи на сайте разработчика. Эта часть отлично работает.

Мне нужно, чтобы галерея отображала пустой вид (особый вид, когда у ArrayList нет содержимого), но я не могу заставить галерею сделать это. Я делал это с ListView и другими AdapterViews в прошлом, но я не могу заставить его работать с 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), но Галерея никогда не проверяет isEmpty, и когда я определил getEmptyView() в Галерее, он также никогда не вызывался. , Я пропустил другой обязательный метод в BaseAdapter, чтобы правильно уведомить о пустом состоянии?

Спасибо!

1 Ответ

1 голос
/ 08 августа 2010

С помощью этой статьи я нашел ответ:

Правильное использование setEmtpyView в AdapterView

Ключ к проблеме заключался в том, что (как только я получил Gallery / AdapterView для правильного вызова пустой проверки состояния с использованием информации о приложении), AdapterView предназначен только для переключения настроек видимости просмотра между содержимым и пустыми представлениями (переключение вида. Ушел и посмотреть. Видимо). Поэтому, если вы не выполнили всю работу по правильному созданию и размещению как содержимого, так и пустых представлений в родительском макете, они не будут отображаться правильно.

В некоторых случаях я программно создал пустое представление (просто TextView) и использовал setEmptyView(), чтобы прикрепить его к представлению адаптера. TextView никогда не был присоединен к LinearLayout, который представлял Activity, поэтому он не отображался даже после того, как AdapterView так любезно установил его View.VISIBLE.

...