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.
- Cómo agregar datos a BaseAdapter personalizado para listView - Android
- Agregar elementos a ListView, mantener la posición de desplazamiento y NO ver un salto de desplazamiento
- ¿Por qué mis métodos ServiceConnection nunca se ejecutan?
- ¿Cómo puedo actualizar una sola fila en un ListView?
- Cómo agregar varias vistas de encabezado en un ListView
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>
- Elemento de ListView personalizado Disposición gráfica Android
- ¿Establecer etiquetas para cada elemento en un ListView en Android?
- Android - ListView filtrar el conteo
- El estilo de la casilla de verificación en la vista de lista es incorrecto
- En Android, ¿cómo lograr un efecto de snap en un listview respetando la aceleración causada por fling?
- Cree dinámicamente un listview con filas de encabezado para cada mes
- Cómo manejar largo toque en el elemento ListView?
- BaseAdapter: set hasStableIds () a false?
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.
- Problema al asignar una instancia de calendario a otra
- Android java.lang.ClassCastException: android.widget.LinearLayout no se puede convertir en android.widget.TextView