Android-notifyDataSetChanged no funciona en BaseAdapter

Tengo un listview en mi actividad, cuando llego al final de listview, que llama asincrónico y obtener nuevos datos utilizando json. Este es el async y baseAdaper códigos:

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,ArrayList<HashMap<String, 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; } } 

Me registré aquí, cuando llego al final de listView, llama addAll y devuelve 30 nuevos artículos compran no se agrega a listview, no sé por qué.

En primer lugar, ya ha notificado su vista de lista cuando llama a addAll () para que este código ya no sea necesario, por favor, quite de su código:

 ladap.notifyDataSetChanged(); 

Agregar nuevos datos al titular de los datos de la vista de lista en lugar de asignar nuevos datos al titular de los datos de la vista de lista:

 public void addAll(ArrayList<HashMap<String, String>> result) { Log.v("this",result.size()+" resultsize"); this.list = result; notifyDataSetChanged(); } 

Remplazar con :

 public void addAll(ArrayList<HashMap<String, String>> result) { Log.v("this",result.size()+" resultsize"); if(list==null){ list = new ArrayList<HashMap<String, String>>(); } list.addAll(result) notifyDataSetChanged(); } 

Intente cambiar esto:

 public void addAll(ArrayList<HashMap<String, String>> result) { Log.v("this",result.size()+" resultsize"); this.list = result; notifyDataSetChanged(); } 

A :

 public void addAll(ArrayList<HashMap<String, String>> result) { Log.v("this",result.size()+" resultsize"); for(int i = 0;i < result.size(); i++) list.add(result.get(i)); //notifyDataSetChanged(); //no need to call again here } 

El punto es, creo que this.list = result; Borrará los elementos antiguos antes de agregar un nuevo elemento.

  • Desplazar el elemento ListView De derecha a izquierda mostrar el botón de borrado
  • Vista de lista con elementos de vista personalizados con superposiciones parciales (Android)
  • Android listview lazy loading
  • No se puede arrastrar DrawerLayout desde ListView
  • Efecto de imagen de cabecera de Spotify ListView
  • Ocultar entrada suave cuando se desplaza la lista
  • ListFragment falta el divisor
  • Desactivar Desplazamiento en el niño de Recyclerview android
  • Paginación de ListView en android
  • ListView 2 filas e icono por artículo en Android
  • Detenga ViewPagers dentro de ListView de restablecer
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.