android-动态添加更多项目到自定义gridview json

时间:2014-12-15 11:36:12

标签: android gridview

我的活动有一个gridview,我通过json获取数据并将它们添加到我的适配器。

这是代码:

gridView = (GridView) findViewById(R.id.gridView);

contactList = new ArrayList<HashMap<String, String>>();
new GetContacts().execute();

private class GetContacts extends AsyncTask<Void, Void,ArrayList<HashMap<String, String>>> {            
    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    @Override
    protected ArrayList<HashMap<String, String>> doInBackground(Void... arg0) { 
        Spots_tab1_json sh = new Spots_tab1_json();
        String jsonStr = sh.makeServiceCall(url+page, Spots_tab1_json.GET);
        ArrayList<HashMap<String, String>> dataC = new ArrayList<HashMap<String, String>>();

        if (jsonStr != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);
                contacts = jsonObj.getJSONArray(TAG_CONTACTS);
                if(contacts.length()<20) 
                        loadmore=false;

                for (int i = 0; i < contacts.length(); i++) {
                    JSONObject c = contacts.getJSONObject(i);
                    HashMap<String, String> contact = new HashMap<String, String>();
                    contact.put("id", new String(c.getString("id").getBytes("ISO-8859-1"), "UTF-8"));
                    contact.put("url", new String(c.getString("url").getBytes("ISO-8859-1"), "UTF-8"));
                    contact.put("text", new String(c.getString("text").getBytes("ISO-8859-1"), "UTF-8"));
                    dataC.add(contact);
                }
            } catch (JSONException e) {
                goterr=true;
            } catch (UnsupportedEncodingException e) {
                goterr=true;
            }
        } else {
            Log.v("this","mi;;");
            goterr=true;
        }
        return dataC;
    }

    @Override
    protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
        super.onPostExecute(result);

        if(!isCancelled() && goterr==false){
            if(ladap==null){
                ladap=new ListAdapter(FistActiivty.this,result);
                gridView.setAdapter(ladap);
            }else{
                 ladap.addAll(result);
            }

        }else{
            MyToast.makeText(FistActiivty.this, DariGlyphUtils.reshapeText(getResources().getString(R.string.problemload)));
        }

    }
}

public class ListAdapter extends BaseAdapter {
    Activity activity;
    public ArrayList<HashMap<String,String>> list;

    public ListAdapter(Activity activity, ArrayList<HashMap<String, String>>list ) {
        super();
        this.activity=FistActiivty.this;
        this.list=list;
    }
    public HashMap<String, String> geting(int position) {
        return list.get(position);
    }

    public void addAll(ArrayList<HashMap<String, String>> result) {
        if(this.list==null){
            //this.list = new ArrayList<HashMap<String, String>>();
            this.list =result;
        }else{
            this.list.addAll(result);
        }
        //list.addAll(result);
        notifyDataSetChanged();
    }

    public int getCount() {
        return list.size();
    }

    public Object getItem(int position) {
        return list.get(position);
    }

    public long getItemId(int arg0) {
        return 0;
    }


    private class ViewHolder {
        TextView Message;
        ImageView img ; 
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        LayoutInflater inflater = activity.getLayoutInflater();
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.row_grid, null);
            holder = new ViewHolder();
            holder.Message = (TextView) convertView.findViewById(R.id.text);
            holder.Message.setTypeface(typeface);
            holder.img=(ImageView)convertView.findViewById(R.id.image);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        item = list.get(position);
        String text = item.get("text");
        Log.v("this","11"+ text);

        holder.Message.setText(text);

        String imgurl = item.get("url");
        if(imgurl.length()>5)
            imageLoader.displayImage(imgurl, holder.img,options, imageListener);
        else 
            holder.img.setImageDrawable(getResources().getDrawable(R.drawable.noimage));

        return convertView;
    }

好的,在这一步,我通过json从互联网上获取数据,将其发布到ListAdapter并将它们添加到我的gridview中,没问题。

在listview中,当我们到达listview的底部时,我们可以添加对更多数据的请求,但是如何调用函数来添加更多在gridview结束时到达的项目?

1 个答案:

答案 0 :(得分:1)

实现此目的的最佳方法是使用 PullToRefreshLibrary here。将该库导入您的工作区,并使用onPullUpToRefresh实现setOnRefreshListener。这将指示列表的结尾。您可以设置对服务器的请求,以便在到达列表末尾时查看更多数据。

在服务器上,您可以实施分页,以便在每次到达列表末尾时加载下一组数据。

我希望这会对你有所帮助。