Android + ListView fondo establece fondo mientras se desplaza?

Tengo un ListView que se rellena a través de un ArrayAdapter. Dentro del adaptador, fijo el color de fondo de la visión dependiente en un condicional. Funciona, pero mientras se desplaza las filas restantes adoptan este color. He aquí un código:

class DateAdapter extends ArrayAdapter<DateVO> { private ArrayList<DateVO> items; public ViewGroup listViewItem; //constructor public DateAdapter(Context context, int textViewResourceId, ArrayList<DateVO> items) { super(context, textViewResourceId, items); this.items = items; } @Override public View getView(int position, View convertView, ViewGroup parent) { try { if (view == null) { LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = vi.inflate(R.layout.row, null); } final DateVO dateItem = items.get(position); if (dateItem != null) { //is this my issue here? does position change while scrolling? if(items.get(position).getField().equals("home")){ view.setBackgroundResource(R.drawable.list_bg_home); } ... } }catch (Exception e) { Log.i(ArrayAdapter.class.toString(), e.getMessage()); } return view; } } 

Ese es el comportamiento predeterminado de un ListView. Puede ser anulada estableciendo el cacheColorHint a transparente. Solo agrega,

 android:cacheColorHint="#00000000" 

en su archivo xml.

Para obtener más detalles, puede ir a través del artículo ListView Backgrounds . Aquí hay un extracto:

Para solucionar este problema, todo lo que tiene que hacer es desactivar la optimización de la sugerencia de color del caché, si utiliza un fondo de color no sólido o establecer la sugerencia en el valor de color sólido apropiado. Puede hacerlo desde el código (consulte setCacheColorHint (int)) o preferiblemente desde XML, utilizando el atributo android: cacheColorHint. Para deshabilitar la optimización, simplemente use el color transparente # 00000000. La siguiente captura de pantalla muestra una lista con android: cacheColorHint = "# 00000000" establecida en el archivo de diseño XML

EDIT: La vista pasada como convertView es esencialmente una vista que es una parte de la vista de lista, pero ya no es visible (debido a desplazamiento). Por lo tanto, en realidad es una vista que había creado, y podría ser una vista para la que había establecido el fondo personalizado. Para solucionar esto sólo asegúrese de que restablece el fondo si la condición no se satisface. Algo como esto :

 if(condition_satisfied) { //set custom background for view } else { //set default background for view convertView.setBackgroundResource(android.R.drawable.list_selector_background); } 

Esencialmente, si su condición no está satisfecha tendrá que deshacer cualquier personalización que está haciendo cuando su condición está satisfecha, ya que podría haber recibido una vista personalizada de edad como convertView . Eso debería resolver tu problema.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.