2015-04-24 6 views
0

У меня есть пользовательский адаптер, и я использовал Universal Image Loader library.Адаптер GridView, getView не работает

MyFragment2

ArrayList<String> items = new ArrayList<>(); 
items.add("drawable://" + R.drawable.q); 
mGridView = (GridView) view.findViewById(R.id.grid_view); 
mGridView.setAdapter(new GridViewAdapter2(getActivity(), items)); 

GridViewAdapter2

private final LayoutInflater mInflater; 
private ArrayList<String> mItems; 

public GridViewAdapter2(Context context, ArrayList<String> items) { 
    this.mInflater = LayoutInflater.from(context); 
    this.mItems = items; 
} 

@Override 
public int getCount() { 
    return mItems.size(); 
} 

@Override 
public Object getItem(int position) { 
    return mItems.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    SquareImageView imageView; 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.item_gridview, parent, false); 
     imageView = (SquareImageView) convertView.findViewById(R.id.imageView1); 
    } else imageView = (SquareImageView) convertView; 
    ImageLoader imageLoader = ImageLoader.getInstance(); 
    imageLoader.init(ImageLoaderConfiguration.createDefault(convertView.getContext())); 
    DisplayImageOptions options = new DisplayImageOptions.Builder() 
      .imageScaleType(ImageScaleType.IN_SAMPLE_INT) 
      .cacheInMemory() 
      .cacheOnDisc() 
      .build(); 
    imageLoader.displayImage(mItems.get(position), imageView, options); 
    return convertView; 
} 
... 

Что случилось с моим кодом? Они компилируются, но не показывают никаких элементов. И не вызывает getView();

SquareImageView представляет собой простой квадратный вид;

ти

+0

Опубликовать весь адаптер – Blackbelt

+0

«getView не работает», вы говорите. Мой хрустальный шар я забыл. Объясните, лучше ли ваша проблема ... – shkschneider

+0

i update gridview – Mqqza

ответ

0

1) Инстанцирование в ImageLoader и создание вариантов не принадлежит в getView(), это должно быть сделано один раз, предпочтительней внутри конструктора.

2) Из документации ИЮОЖ для drawable://

ПРИМЕЧАНИЕ: Используйте вытяжке: // только если вам это действительно нужно! Всегда учитывайте собственный способ загрузки drawables - ImageView.setImageResource (...) вместо использования ImageLoader.

Вы уверены, что это абсолютно необходимо?

3) Посмотрите, как должен быть реализован BaseAdapter (они работают практически так же, как и для GridView и ListView), например. this one

+0

Его потребность в тестировании. Ты. – Mqqza

0

@Xcihnegn ty, его работа!

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    GridViewHolder viewHolder; 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.item_gridview, parent, false); 
     viewHolder = new GridViewHolder(); 
     viewHolder.mImageView = (SquareImageView) convertView.findViewById(R.id.imageView1); 
     convertView.setTag(viewHolder); 
    } else viewHolder = (GridViewHolder) convertView.getTag(); 
    ImageLoader imageLoader = ImageLoader.getInstance(); 
    imageLoader.init(ImageLoaderConfiguration.createDefault(convertView.getContext())); 
    DisplayImageOptions options = new DisplayImageOptions.Builder() 
      .imageScaleType(ImageScaleType.IN_SAMPLE_INT) 
      .cacheInMemory() 
      .cacheOnDisc() 
      .build(); 
    imageLoader.displayImage(mItems.get(position), viewHolder.mImageView, options); 
    return convertView; 
} 

private static class GridViewHolder { 

    public SquareImageView mImageView; 
}