我有一个关于我的活动的列表视图,当我到达listview的末尾时,它调用async并使用json获取新数据.
这是async和baseAdaper代码:
这是async和baseAdaper代码:
ListAdapter ladap; private class GetContacts AsyncTask<Void,Void,ArrayList<HashMap<String,String>>> { @Override protected Void 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); for (int i = 0; i < contacts.length(); i++) { JSONObject c = contacts.getJSONObject(i); String id = new String(c.getString("id").getBytes("ISO-8859-1"),"UTF-8"); String dates = new String(c.getString("dates").getBytes("ISO-8859-1"),"UTF-8"); String price = new String(c.getString("gheymat").getBytes("ISO-8859-1"),"UTF-8"); HashMap<String,String> contact = new HashMap<String,String>(); contact.put("id",id); contact.put("dates",dates); contact.put("price",price); dataC.add(contact); } } } catch (JSONException e) { goterr = true; } catch (UnsupportedEncodingException e) { goterr = true; } } else { 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(MainActivity.this,result); lv.setAdapter(ladap); }else{ ladap.addAll(result); ladap.notifyDataSetChanged(); } }
}
public class ListAdapter extends BaseAdapter { Activity activity; public ArrayList<HashMap<String,String>> list; public ListAdapter(Activity activity,String>> list) { super(); this.activity = (Activity) activity; this.list = list; } public void addAll(ArrayList<HashMap<String,String>> result) { Log.v("this",result.size()+" resultsize"); this.list = result; notifyDataSetChanged(); } public int getCount() { return contactList.size(); } public Object getItem(int position) { return contactList.get(position); } public long getItemId(int arg0) { return 0; } private class ViewHolder { TextView title,price; ImageView img ; //RelativeLayout rl; } public View getView(int position,View convertView,ViewGroup parent) { ViewHolder holder; LayoutInflater inflater = activity.getLayoutInflater(); if (convertView == null) { convertView = inflater.inflate(R.layout.item,null); holder = new ViewHolder(); holder.title = (TextView) convertView.findViewById(R.id.title); holder.price = (TextView) convertView.findViewById(R.id.price); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } item = contactList.get(position); holder.price.setText(item.get("price")); return convertView; } }
我在这里登录,当我到达listView的末尾时,它调用addAll并返回新的30项购买它没有添加到listview,我不知道为什么.
解决方法
首先,当您调用addAll()时,您已经通知了列表视图,因此不再需要此代码,请从代码中删除:
ladap.notifyDataSetChanged();
将新数据添加到列表视图数据持有者,而不是将新数据分配给列表视图数据持有者:
public void addAll(ArrayList<HashMap<String,result.size()+" resultsize"); this.list = result; notifyDataSetChanged(); }
用…来代替 :
public void addAll(ArrayList<HashMap<String,result.size()+" resultsize"); if(list==null){ list = new ArrayList<HashMap<String,String>>(); } list.addAll(result) notifyDataSetChanged(); }