Elemento de lista que se repite en android personalizado listview

En mis artículos modificados para requisitos particulares de la lista están repitiendo. La posición del artículo es igual para todo el artículo. El código está por debajo

ListAdapter.java-

public class ListAdapter extends BaseAdapter{ private List<String> mName; private List<Drawable> mIcon; private Context mContext; public ListAdapter(Context mContext, List<String> Name, List<Drawable> Icon) { this.mContext=mContext; this.mName=Name; this.mIcon=Icon; } @Override public int getCount() { // TODO Auto-generated method stub return mName.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(final int position, View v, ViewGroup parent) { View mLayout; TextView mText; ImageView mImage; CheckBox mCheckBox; if(v==null){ LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mLayout=new View(mContext); mLayout=(LinearLayout) inflater.inflate(R.layout.list_menu, null); mText=(TextView) mLayout.findViewById(R.id.Name); mImage=(ImageView) mLayout.findViewById(R.id.Icon); mCheckBox=(CheckBox) mLayout.findViewById(R.id.mCheckbox); mText.setText(mName.get(position)); mImage.setImageDrawable(mIcon.get(position)); mCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton check, boolean isChecked) { if(check.isChecked()){ Toast.makeText(mContext, "..."+mName.get(position)+"..."+position, Toast.LENGTH_SHORT).show(); } } }); } else{ mLayout=(View)v; } return mLayout; } } 

Pruebe éste, necesita setTag() para cada conversión.

  @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder mHolder; if (convertView == null) { convertView = mInflater.inflate(R.layout.list_menu, null); mHolder = new ViewHolder(); mHolder.mText=(TextView) convertView.findViewById(R.id.appName); mHolder.mImage=(ImageView) convertView.findViewById(R.id.appIcon); mHolder.mCheckBox=(CheckBox) convertView.findViewById(R.id.mCheckbox); convertView.setTag(mHolder); } else { mHolder = (ViewHolder) convertView.getTag(); } return convertView; } private class ViewHolder { private TextView mText; private ImageView mImage; private CheckBox mCheckBox; } 

Si está utilizando extends BaseAdapter entonces esta solución funcionará. https://stackoverflow.com/a/28791031/4531507

Cambia tu getView

  LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mLayout=new View(mContext); mLayout=(LinearLayout) inflater.inflate(R.layout.list_menu, null); 

Inicie el inflador en su constructor. Eliminar este mLayout=new View(mContext) porque está inflando un diseño con mLayout=(LinearLayout) inflater.inflate(R.layout.list_menu, null)

En su constructor

 LayoutInflater inflater; public ListAdapter(Context mContext, List<String> Name, List<Drawable> Icon) { this.inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.mContext=mContext; this.mName=Name; this.mIcon=Icon; } 

Utilice un soporte de vista para desplazamiento suave y rendimiento.

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

 @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder vh; if(convertView==null){ vh = new ViewHolder(); convertView =(LinearLayout) inflater.inflate(R.layout.list_menu, null); vh.mText=(TextView) convertView.findViewById(R.id.Name); vh.mImage=(ImageView) convertView.findViewById(R.id.Icon); vh.mCheckBox=(CheckBox) convertView.findViewById(R.id.mCheckbox); convertView.setTag(vh); } else { vh = (ViewHolder) convertView.getTag(); } vh.mText.setText(mName.get(position)); vh.mImage.setImageDrawable(mIcon.get(position)); vh.mCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton check, boolean isChecked) { if(check.isChecked()){ Toast.makeText(mContext, "..."+mName.get(position)+"..."+position, Toast.LENGTH_SHORT).show(); } } }); return convertView; } static class ViewHolder { TextView mText; ImageView mImage; CheckBox mCheckBox; } 
 // try this public class ListAdapter extends BaseAdapter { private List<String> mName; private List<Drawable> mIcon; private Context mContext; public ListAdapter(Context mContext, List<String> Name, List<Drawable> Icon) { this.mContext=mContext; this.mName=Name; this.mIcon=Icon; } @Override public int getCount() { // TODO Auto-generated method stub return mName.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(final int position, View v, ViewGroup parent) { ViewHolder holder; if(v==null){ holder = new ViewHolder(); LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v =(LinearLayout) inflater.inflate(R.layout.list_menu, null); holder.mText=(TextView) v.findViewById(R.id.Name); holder.mImage=(ImageView) v.findViewById(R.id.Icon); holder.mCheckBox=(CheckBox) v.findViewById(R.id.mCheckbox); v.setTag(holder); } else{ holder = (ViewHolder) v.getTag(); } holder.mText.setText(mName.get(position)); holder.mImage.setImageDrawable(mIcon.get(position)); holder.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton check, boolean isChecked) { if(check.isChecked()){ Toast.makeText(mContext, "..."+mName.get(position)+"..."+position, Toast.LENGTH_SHORT).show(); } } }); v.setTag(holder); return v; } class ViewHolder{ TextView mText; ImageView mImage; CheckBox mCheckBox; } } 

Asegúrese de que el convertView no es nulo. Por lo tanto, colocar todo el código después de la if (convertView == null) {} que asegura que usted tiene un convertView cuyo valor no es nulo, inflando de contexto si es así.

 @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(context); convertView = inflater.inflate(R.layout.list_menu, parent, false); } TextView mText=(TextView) convertView.findViewById(R.id.appName); ImageView mImage=(ImageView) convertView.findViewById(R.id.appIcon); CheckBox mCheckBox=(CheckBox) convertView.findViewById(R.id.mCheckbox); mText.setText(mName.get(position)); mImage.setImageDrawable(mIcon.get(position)); return convertView; } 
  • React Native ListView TextInput se bloquea desde la renderización de optimización de rendimiento
  • Android: listview entradas dobles después de girar la pantalla
  • ¿Cómo recuperar más de 1000 filas de Parse.com?
  • ANDROID: divide la pantalla en 2 partes iguales con 2 listas
  • Android ListView con elementos que se pueden hacer clic en sus filas provoca problemas de desplazamiento continuo
  • Diseño de filas ListView de Android ignorando el relleno
  • Reciclar vistas en un listview, vale la pena?
  • Android obtiene texto de todas las casillas marcadas en listView
  • Galería de imágenes de desplazamiento horizontal de Android
  • ¿Cuál es la diferencia entre BaseAdapter y ArrayAdapter?
  • ¿Cómo implementar una lista interminable con RecyclerView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.