0

カスタム アダプターがあり、Universal Image Loader ライブラリを使用しました。

マイフラグメント2

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 は単純な正方形の画像ビューです。

タイ

4

2 に答える 2

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;
}
于 2015-04-24T13:02:50.247 に答える
0

1) のインスタンスImageLoader化とオプションの作成は に属しませんgetView()。これは一度行う必要があり、できればコンストラクター内で行います。

2)UILのドキュメントからdrawable://

注: drawable:// は、本当に必要な場合にのみ使用してください。ImageLoader を使用する代わりに、ドローアブルをロードするネイティブな方法 - ImageView.setImageResource(...) を常に考慮してください。

絶対にそうする必要がありますか?

3) a のBaseAdapter実装方法を確認してください (GridView と ListView でほぼ同じように機能します)

于 2015-04-24T12:56:32.427 に答える