【问题标题】:Android GridView Adapter using ArrayList使用 ArrayList 的 Android GridView 适配器
【发布时间】:2014-01-07 17:22:24
【问题描述】:

我无法为我的Griview 创建一个接受ArrayList 的适配器。我认为适配器类中的坏行是:viewHldr.wcbc_image_iv.setImageResource(urlStrArrList.get(position));,看来调用.setImageResource 是问题所在。

public class JGrid66 extends Activity {

JSONObject jsonOb;
JSONArray JSArrGallery = null;;
GridView grid65_gv;
JGrid66Adapter2 jGr7Adap;
ProgressDialog mProgressDialog;
ArrayList<String> idStrArrList = new ArrayList<String>();
ArrayList<String> urlStrArrList = new ArrayList<String>();
ArrayList<String> descrStrArrList = new ArrayList<String>();

 // JSON Node names
private static final String TAG_GALLERY = "gallery";
private static final String TAG_GALLERYURL = "galleryurl";
private static final String TAG_ID = "id";
private static final String TAG_GALLERYDESCR = "gallerydescr";

static String FLAG = "flag";

private String jsonUrl = "http://www.mysite.com/apps/wcbc/galleryuil.txt";

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.jgrid66);
    grid65_gv = (GridView) findViewById(R.id.jgrid66_gv);   



}//--- END onCreate

//--- DownloadJSON Class
private class DownloadJSON extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        JGrid4Adapter jParser = new JGrid4Adapter();
        // getting JSON string from URL
        JSONObject jsonOb = jParser.getJSONFromUrl(jsonUrl);            
        try {
            JSArrGallery = jsonOb.getJSONArray(TAG_GALLERY);
            // looping through All gallery images
            for (int i = 0; i < JSArrGallery.length(); i++) {
                JSONObject galleryJO = JSArrGallery.getJSONObject(i);
                String idStr = galleryJO.getString(TAG_ID);
                String urlStr = galleryJO.getString(TAG_GALLERYURL);
                String descrStr = galleryJO.getString(TAG_GALLERYDESCR);

                idStrArrList.add(idStr);
                urlStrArrList.add(urlStr);
                descrStrArrList.add(descrStr);


            }// -- END for loop
        } catch (JSONException e) {
            e.printStackTrace();
        }// --- END Try
        return null;
    }

    @Override
    protected void onPostExecute(Void args) {
        jGr7Adap = new JGrid66Adapter2(JGrid66.this, urlStrArrList);
        grid65_gv.setAdapter(jGr7Adap);
        jGr7Adap.notifyDataSetChanged();
    }

}

//--- END DownloadJSON Class
}

这是适配器

public class JGrid66Adapter2 extends BaseAdapter {  
private ArrayList<String> urlStrArrList;
Context context;

public JGrid66Adapter2(Context context,ArrayList<String> urlStrArrList) {
    super();
    this.urlStrArrList = urlStrArrList;
    }


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

@Override
    public String getItem(int position) {
    return urlStrArrList.get(position);
    }

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

    public static class ViewHolder
    {
    public ImageView wcbc_image_iv;
    }

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHldr;
    LayoutInflater inflater = ((Activity) context).getLayoutInflater();

    if(convertView==null){
        viewHldr = new ViewHolder();
        convertView = inflater.inflate(R.layout.jgrid66_item, null);
        viewHldr.wcbc_image_iv = (ImageView) convertView.findViewById   (R.id.jgrid66_iv);
        convertView.setTag(viewHldr);
    }
    else
    {
        viewHldr = (ViewHolder) convertView.getTag();
    }
    //--- I commented this out because this is where it breaks.
    //viewHldr.wcbc_image_iv.setImageResource(urlStrArrList.get(position));
    return convertView;
}

}

任何帮助都会很棒!

【问题讨论】:

  • 需要从url下载图片,然后设置成imageview

标签: android json android-gridview


【解决方案1】:
private ArrayList<String> urlStrArrList;

是字符串的数组列表。如果你有你需要下载图片的 url,然后将其设置为 imageview。

setImageResource 将资源 id 作为参数,它是一个 int 值。

public void setImageResource (int resId)

Added in API level 1
Sets a drawable as the content of this ImageView.

您可以考虑使用延迟加载Universal Image Loader 或使用picasso

Caching images and displaying

【讨论】:

  • 谢谢拉古南丹。我真正想做的是修改通用图像加载器,以便它接受我的 ArrayList,所以我认为你让我走上了正确的道路。我正在尝试使上述活动正常工作,然后将其应用到 Universal Image Loader。
  • @kirktoon1882 那是什么不起作用?活动与您的错误无关。请在我的帖子中发布的链接中检查 UIL 的实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多