SetOnItemClickListener en ListView que afecta a varias filas

Tengo un listview de encargo y un adaptador de encargo. Al hacer clic en una fila de esta vista de lista, el texto de un TextView se establece en blanco y el fondo de esta fila se establece en negro.

Todo está bien, pero al hacer clic en una fila, otras filas están teniendo un color de fondo establecido en Negro y también cuando se desplaza hacia arriba y hacia abajo todos se desorden.

GetView () en el adaptador personalizado

public View getView(final int position, View convertView, ViewGroup parent) { final ListItem holder; View vi=convertView; if(vi==null){ vi = inflater.inflate(R.layout.list, null); holder = new ListItem(); holder.nametext= (TextView) vi.findViewById(R.id.name); vi.setTag(holder); }else{ holder = (ListItem) vi.getTag(); } holder.nametext.setText(""+item.name); return vi; } 

En mainactivity:

 CustomAdapter listadapter = new CustomAdapter(context, R.layout.list, items); list.setAdapter(listadapter); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapter, View view, int position, long arg){ TextView v = (TextView) view.findViewById(R.id.name); view.setBackgroundColor(Color.BLACK); v.setTextColor(Color.WHITE); } }); 

Intenté poner el setOnItemClickListener en el getView () pero tampoco suerte.

¿Alguna ayuda? Gracias.

Las vistas de lista personalizadas "crean" una vista para mostrar sólo las filas, al desplazarse por la siguiente fila se verá afectada como la primera.

Para evitar este problema, debe crear un campo booleano en ListItem Clicked ;

A continuación, al hacer clic en la vista, el elemento.Clicked se establece en true donde en getView ()

 final ListItem item = items.get(position); 

y

 List<ListItem> items; 

Como la variable del adaptador

La implementación:

Debe establecer el setOnClickListener en su getView () como se muestra a continuación

 vi.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg1) { if(previousView!=null){ ListItem previousItem = items.get(previousPosition); previousItem.Clicked = false; } item.Clicked = true; previousView = arg1; previousPosition = position; notifyDataSetChanged(); } }); if(!item.isClicked){ holder.nametext.setTextColor(Color.BLACK); vi.setBackgroundColor(Color.WHITE); }else{ holder.nametext.setTextColor(Color.WHITE); vi.setBackgroundColor(Color.BLACK); } }); 

Es un efecto predeterminado de la sugerencia de color de caché de la vista de lista que puedes evitar configurando la propiedad "android: cacheColorHint" en @null como ésta.

 <ListView android:id="@+id/lstEventComment" android:layout_width="match_parent" android:layout_height="wrap_content" android:cacheColorHint="@null" /> 
  • Vista transparente sobre ImageView
  • Cómo configurar Tint en NavigationView a algunos iconos
  • Efecto del carrusel de Android con diseños
  • ¿Cómo puedo añadir contenido personalizado en una vista de navegación
  • Eliminar un OnClickListener en una vista quitar todos los eventos de toque en las vistas detrás
  • SearchView edittext siempre es nulo
  • Android SearchView con otros elementos de ActionBar
  • Vista de superficie como un mapa de bits en android
  • Android: vista de 360 ​​grados de un objeto
  • Cómo traer una vista al frente sin llamar bringToFront ()?
  • ¿Por qué obtengo un error al intentar establecer el contenido de un tabspec en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.