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.
- Ver paginador androide con imagen de fondo único
- Android - vistas de servicio
- Guardar / restaurar el estado de vistas personalizadas en android
- ¿Por qué la publicación y cancelación de un runnable en un resultado de View and Handler en bahviour diferente?
- Cambiar el color de fondo del botón SearchView y la consulta
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.
- Reseting el color de fondo de una vista
- Página Curl Animation en android?
- Android: cómo determinar la última letra totalmente visible en TextView?
- ¿Por qué se crea un FrameLayout extra para fragmentos?
- ¿Por qué mi barra de progreso no está centrada verticalmente?
- View.getId () devolviendo ID incorrecto en OnItemClickListener
- addView no funciona
- Cómo inflar vista desde XML en Android?
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" />
- Establecer el margen negativo en la vista programáticamente
- Inyectar eventos de pantalla táctil, Android 5.0, dev / input / eventX