¿Repetición de elementos en ListView?

Todo estaba funcionando bien, pero ahora no estoy recibiendo lo que está sucediendo, tengo 10 elementos para mostrar en el listView, su trabajo bien hasta el sexto elemento y después de que se repite de nuevo desde el primer elemento de nuevo ??

public class GroupDetailsAdapter extends BaseAdapter { List<GetSetGroupDetails> group_details = new ArrayList<GetSetGroupDetails>(); Context context; Typeface face; public GroupDetailsAdapter(List<GetSetGroupDetails> group_details, Context context) { super(); this.group_details.clear(); this.group_details = group_details; this.context = context; face = Typeface.createFromAsset(context.getAssets(), "HelveticaNeueLTStd-Th.otf"); } @Override public int getCount() { // TODO Auto-generated method stub int count = group_details.size(); return count; } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View v = convertView; ViewHolder holder; if (v == null) { try { LayoutInflater vi = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.group_item, null); holder = new ViewHolder(); holder.tv_group_name = (TextView) v .findViewById(R.id.tv_group_name); String group_name = group_details.get(position).getGroup_name(); holder.tv_group_name.setText(group_name); holder.tv_group_name.setTypeface(face); holder.tv_group_reg_id = (TextView) v .findViewById(R.id.tv_group_reg_id); String groupRegId = group_details.get(position) .getGroup_reg_id(); holder.tv_group_reg_id.setText(groupRegId); holder.tv_group_reg_id.setTypeface(face); holder.tv_subscriber_count = (TextView) v .findViewById(R.id.tv_subscriber_count); holder.tv_subscriber_count.setText(group_details.get(position) .getSubscriber_count()); v.setTag(holder); } catch (Exception e) { e.printStackTrace(); } } else holder = (ViewHolder) v.getTag(); return v; } class ViewHolder { TextView tv_group_name; TextView tv_group_reg_id; TextView tv_subscriber_count; } } 

Usted se enfrenta a ese problema de repetición de datos, solo porque no está siguiendo los estándares exactos de implementación del patrón de View-Holder.

Incorrecto:

Aquí usted está haciendo findViewById () y la configuración de datos si la vista es nula, por lo que se ejecutará bien para el primer conjunto de elementos, posdata que le mostrará los mismos datos para los próximos conjuntos de elementos.

 public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View v = convertView; ViewHolder holder; if (v == null) { try { LayoutInflater vi = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.group_item, null); holder = new ViewHolder(); holder.tv_group_name = (TextView) v .findViewById(R.id.tv_group_name); String group_name = group_details.get(position).getGroup_name(); holder.tv_group_name.setText(group_name); holder.tv_group_name.setTypeface(face); holder.tv_group_reg_id = (TextView) v .findViewById(R.id.tv_group_reg_id); String groupRegId = group_details.get(position) .getGroup_reg_id(); holder.tv_group_reg_id.setText(groupRegId); holder.tv_group_reg_id.setTypeface(face); holder.tv_subscriber_count = (TextView) v .findViewById(R.id.tv_subscriber_count); holder.tv_subscriber_count.setText(group_details.get(position) .getSubscriber_count()); v.setTag(holder); } catch (Exception e) { e.printStackTrace(); } } else holder = (ViewHolder) v.getTag(); return v; } 

Correcto:

La forma correcta de implementar el patrón de View Holder es encontrar vistas si la vista actual es null (que ocurriría por primera vez) y establecer datos sólo después de hacerlo. Así que eventualmente findViewById() proceso se hará por primera vez y la próxima vez en adelante obtendrá vistas mediante el uso de etiquetas adjuntas.

 public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View v = convertView; ViewHolder holder; if (v == null) { LayoutInflater vi = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.group_item, null); holder = new ViewHolder(); holder.tv_group_name = (TextView) v .findViewById(R.id.tv_group_name); holder.tv_group_reg_id = (TextView) v .findViewById(R.id.tv_group_reg_id); holder.tv_subscriber_count = (TextView) v .findViewById(R.id.tv_subscriber_count); v.setTag(holder); } catch (Exception e) { e.printStackTrace(); } } else holder = (ViewHolder) v.getTag(); String group_name = group_details.get(position).getGroup_name(); holder.tv_group_name.setText(group_name); holder.tv_group_name.setTypeface(face); String groupRegId = group_details.get(position) .getGroup_reg_id(); holder.tv_group_reg_id.setText(groupRegId); holder.tv_group_reg_id.setTypeface(face); holder.tv_subscriber_count.setText(group_details.get(position) .getSubscriber_count()); return v; } 

Usted puede obtener nullpointerexception .. para deshacerse de este intente este código simple

  public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder vh; View v = convertView; if(v == null){ v = LayoutInflater.from(ctx).inflate(R.layout.simple_list_item, parent, false); vh = new ViewHolder(v); v.setTag(vh); } else{ vh = (ViewHolder) v.getTag(); } vh.tvTitle.setText(list.get(position).toString()); return v; } class ViewHolder{ TextView tvTitle; public ViewHolder(View v){ tvTitle = (TextView) v.findViewById(R.id.tvVideoName); } 
  • Posición incorrecta de elementos después de usar un customAdapter
  • Cómo utilizar la funcionalidad de búsqueda en la vista de lista personalizada en Android
  • Cambiar la visibilidad del elemento Gridview
  • No puedo acceder a R.layout.mylayoutname en mi ArrayAdapter personalizado
  • Adaptador de vista personalizada con filtro Android
  • Implementar ListView expandible con adaptador personalizado
  • Selección de imágenes mutiltiple desde la vista de galería
  • Referencia de diseño duplicada en la vista de lista
  • Listview y CustomAdapter que amplían SimpleCursorAdapter
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.