Android Colores Alternativos Para ListView es Aleatorio

Estoy intentando fijar el color de fondo alternativo para la visión de lista y su ajuste al azar los colores de fondo cada vez que comienzo esa actividad.

introduzca la descripción de la imagen aquíintroduzca la descripción de la imagen aquí

Adaptador Array

public class PlacesListAdapter extends ArrayAdapter<Place> implements Filterable { public Context context; private List<Place> orig, itemDetailsrrayList; private PlaceFilter filter; public PlacesListAdapter(Context context, int textViewResourceId) { super(context, textViewResourceId); } public PlacesListAdapter(Context context, int resource, List<Place> places) { super(context, resource, places); this.context = context; // this.places = places; itemDetailsrrayList = places; orig = new ArrayList<Place>(itemDetailsrrayList); filter = new PlaceFilter(); // imageLoader = new ImageLoader(context.getApplicationContext()); } public int getCount() { return itemDetailsrrayList.size(); } public Place getItem(int position) { return itemDetailsrrayList.get(position); } public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; // View view = convertView; // Place p = places.get(position); if (convertView == null) { LayoutInflater viewInflater; viewInflater = LayoutInflater.from(getContext()); convertView = viewInflater.inflate(R.layout.list_item_place, null); holder = new ViewHolder(); holder.placeTitle = (TextView) convertView .findViewById(R.id.place_title); holder.placeDistance = (TextView) convertView .findViewById(R.id.place_distance); holder.placeCategoryIcon = (ImageView) convertView .findViewById(R.id.place_category_icon); // Setting Alternative Row Colors if (position % 2 == 0) { convertView .setBackgroundResource(R.drawable.list_view_place_row_1); } else { convertView .setBackgroundResource(R.drawable.list_view_place_row_2); } convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.placeTitle.setText(itemDetailsrrayList.get(position) .getPlaceTitle()); holder.placeDistance.setText("200"); holder.placeCategoryIcon.setImageResource(R.drawable.icon_category); return convertView; } static class ViewHolder { TextView placeId; TextView placeTitle; TextView placeDistance; ImageView placeCategoryIcon; } @Override public Filter getFilter() { // TODO Auto-generated method stub return filter; } private class PlaceFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults oReturn = new FilterResults(); ArrayList<Place> results = new ArrayList<Place>(); if (orig == null) orig = itemDetailsrrayList; if (constraint != null) { if (orig != null && orig.size() > 0) { for (Place g : orig) { if (g.getPlaceTitle() .toLowerCase() .startsWith(constraint.toString().toLowerCase())) results.add(g); } } oReturn.values = results; } return oReturn; } @SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence constraint, FilterResults results) { itemDetailsrrayList = (ArrayList<Place>) results.values; notifyDataSetChanged(); } } } 

XML

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/list_view_place_row_1" android:state_pressed="false" android:state_selected="false"/> <item android:drawable="@color/list_view_place_selected" android:state_pressed="true" android:state_selected="false"/> <item android:drawable="@color/list_view_place_selected" android:state_pressed="false" android:state_selected="true"/> <item android:drawable="@android:color/transparent"/> </selector> 

Antes de devolver el convertView, configure el fondo como desee. Utilice esta línea justo antes de devolver el archivo convertView

  if (position % 2 == 0) { convertView .setBackgroundResource(R.drawable.list_view_place_row_1); } else { convertView .setBackgroundResource(R.drawable.list_view_place_row_2); } return convertView; 

No estoy seguro amigo, pero creo que va a entrar en el (convertView == null) por primera vez. Después de eso cuando llame a holder = (ViewHolder) convertView.getTag(); entonces la solicitud para la vista, que tienen el color de fondo posición anterior. Es por eso que estaba recibiendo esa salida

El código parece correcto. Se puede intentar seguir:

Declare matriz de enteros de colores:

 private int[] colors = new int[] { R.drawable.list_view_place_row_1, R.drawable.drawable.list_view_place_row_2}; 

Y en getView () ….

 int colorPos = position % colors.length; convertView.setBackgroundResource(colors[colorPos]); 

en el método getview, puede implementar una lógica, es decir, si la posición es incluso no, entonces establecer el color de fondo1 y si la posición es impar, entonces establecer el color de fondo2.

  • El divisor de Android ExpandableListView es invisible
  • Mostrar subtemas y títulos de ListView
  • ¿Cómo recargar / refrescar el fragmento que ya se ha mostrado una vez?
  • ¿Hay una manera de mostrar la barra de desplazamiento de ListView todo el tiempo?
  • ¿Cómo conseguir el foco del niño de ListView?
  • Android: ¿Para establecer un elemento como seleccionado cuando se abre ListView?
  • ListView es completamente inferior a RecyclerView?
  • Onfling y OnTouch no trabajan juntos
  • Android Action Bar Search: ¿Cómo filtrar una lista por la propiedad de un elemento de la lista?
  • ExpandableListView con opción múltiple guardar el elemento seleccionado en un array
  • Android: Capaz de hacer clic a través del cajón de nav? AppCompat v7: r21
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.