Android: ¿Los elementos de las listas no se vuelven naranjas cuando se hace clic?

Tengo un ListView en el código de mi aplicación, que cuando se hace clic utiliza un AdapterView.OnItemClickListener para detectar clics. El problema es que al hacer clic en un elemento, el fondo del elemento se convierte en blanco, en lugar del color naranja predeterminado. Me gusta esto: Introduzca aquí la descripción de la imagen

Además, cuando no uso AdapterView, los elementos que se hacen clic en naranja sin ningún problema. ¿Cómo hago para que el fondo del elemento hecho clic sea naranja de nuevo?

EDITAR:

Diseño de la lista: main.xml

  <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" android:background="#00000000"> <!-- ListView (grid_items) --> <ListView android:id="@+id/listview" android:layout_height="fill_parent" android:textSize="15px" android:layout_width="fill_parent" android:background="#00000000"> </ListView> </RelativeLayout> 

OnCreate ():

 public void onCreate(Bundle savedInstanceState) {try{ super.onCreate(savedInstanceState); setContentView(R.layout.main); lv= (ListView)findViewById(R.id.listview); lv.setBackgroundColor(Color.TRANSPARENT); lv.setCacheColorHint(Color.TRANSPARENT); //......calculations for(int q = 0; q <v; q++){ HashMap<String, String> map = new HashMap<String, String>(); map.put("col_1", array[q]); fillMaps.add(map); lv.setOnItemClickListener(onListClick); } //......calculations } 

AdapterView:

 private AdapterView.OnItemClickListener onListClick=new AdapterView.OnItemClickListener(){ public void onItemClick(AdapterView<?> parent,View view, int position, long id) { lv.setBackgroundColor(Color.TRANSPARENT); lv.setCacheColorHint(Color.TRANSPARENT); //.....calculations } 

Tema personalizado que se utiliza:

  <?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomWindowTitleBackground"> <item name="android:background">#323331</item> </style> <style name="CustomTheme" parent="android:Theme"> <item name="android:windowTitleSize">35dip</item> <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item> </style> </resources> 

La mejor manera de personalizar elementos de vista de lista es crearlos en un archivo xml y, a continuación, utilizando un adaptador BaseAdapter o cualquier otro tipo de adaptador de lista, infle ese diseño .xml y rellene los datos. Para personalizar una animación de relieve, todo lo que necesita es crear un estado Drawable para los diferentes estados de un elemento.

Así que ir a un "Nuevo archivo xml" -> "tipo de recurso dibujable" -> "forma" nombre y terminar verá este pedazo de código:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > </shape> 

Vamos a crear un fondo para un estado pulsado ListItem:

  <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#86d47f" this is your custom color /> </shape> 

Y estado no prensado es otro archivo:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#00000000" /> </shape> 

A continuación, un archivo selector de listas que se utilizará como fondo de un elemento de vista de lista: vaya a "nuevo archivo xml" -> "dibujable" -> "selector de lista" nombre como "item_background" -> finish

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="300" !!this is the fade duration time for your animation> <item android:drawable="@drawable/bg_drawable" android:state_pressed="true"></item> <item android:drawable="@drawable/transparend"></item> </selector> 

A continuación, crear un archivo xml para un elemento, personalizarlo como desee, pero para el conjunto de diseño principal

 android:background="@drawable/item_background" 

Aquí tienes, todo funciona perfecto … aquí está mi clase de adaptador:

 public class ListAdapter extends ArrayAdapter<String> { LayoutInflater inflater; public ListAdapter(Context context, int textViewResourceId, List<String> objects) { super(context, textViewResourceId, objects); inflater = LayoutInflater.from(context); } @Override public View getView(int position, View convertView, ViewGroup parent) { String str_value = this.getItem(position); if (convertView == null) { convertView = inflater.inflate(R.layout.list_item, null); } TextView tv = (TextView) convertView.findViewById(R.id.textView1); tv.setText(str_value); return convertView; } } 

Y aquí estás, supongo que lo marcarás como una respuesta .. lista

Así que una solución simple es hacer que el color de la visión esté en el onClicklistenener sí mismo:

 private AdapterView.OnItemClickListener onListClick=new AdapterView.OnItemClickListener(){ public void onItemClick(AdapterView<?> parent,View view, int position, long id) { lv.setBackgroundColor(Color.TRANSPARENT); lv.setCacheColorHint(Color.TRANSPARENT); // I added this if(is the item checked ){ view.setBackgroundColor(Color.BLUE); //or whatever }else{ view.setBackgroundColor(00000000); } //.....calculations } 

Tendrá que mantener la información sobre el tiempo que el elemento está marcado o no.

Si usted no desea usar el onClickListener pero sólo utiliza estilos (que podría ser la forma preferible), no puedo ayudarle furher por el momento.

Edit: Por cierto, no puedo ver por qué yout hacer esto en onClickListener on cada vez:

 lv.setBackgroundColor(Color.TRANSPARENT); lv.setCacheColorHint(Color.TRANSPARENT); 

Espero que esto ayude de todos modos.

Pruebe esto para configurar cualquier selector personalizado:

En 'styles.xml' crea este estilo:

 <style name="MyList"> <item name="android:drawSelectorOnTop">true</item> <item name="android:listSelector">@drawable/my_list_selector</item> </style> 

Y en su diseño simplemente añada este estilo al ListView:

 <ListView .... style="@style/MyList" .... /> 

Y en 'drawable' puede definir el 'my_list_selector' con el color o la imagen deseada:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape> <solid android:color="@color/state_pressed" /> </shape> </item> <item android:state_focused="true"> <shape> <solid android:color="@color/state_focused" /> </shape> </item> <item android:drawable="@android:color/transparent" /> </selector> 

Agregue estos valores de color a su 'colors.xml':

 <?xml version="1.0" encoding="utf-8"?> <resources> <color name="state_pressed">#BB7dbcd3</color> <color name="state_focused">#777dbcd3</color> <color name="transparent">#00000000</color> </resources> 

Tenía un archivo llamado list_selector_background_longpress.9 dentro de mi carpeta list_selector_background_longpress.9 , que tenía una foto blanca con una línea anaranjada en la parte superior. Así que lo cambié con una imagen de color holo_orange_dark , y eso lo resolvió. Qué solución tan estúpidamente simple para un problema así.

  • React Native ListView TextInput se bloquea desde la renderización de optimización de rendimiento
  • ListView cargar más en la parte inferior de desplazamiento
  • Implementación correcta de cambiar los datos de ListView con CursorAdapter
  • ¿Cómo puedo quitar el botón de borrar en searchbox de listview?
  • Android ListView con OnItemClickListener Y GestureDetector
  • ¿Cómo puedo añadir mi diseño dinámico a ListView?
  • ¿Por qué el onItemClick de Android desea un largo para id de fila?
  • Cómo cargar más vistas usando un adaptador ListView
  • Android personalizado ListView repite el fondo de selección
  • Xamarin.Forms ListView: establece el color de resaltado de un elemento seleccionado
  • ¿Cómo abrir el Contexto del Menú Android con el botón de clic en el adaptador de listview?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.