Cambiar un icono en una entrada de Android ListView cuando se presiona

Actualmente estoy intentando implementar un ListView en Android que incluya filas con un icono y un texto descriptivo. Cuando el usuario pulsa una fila, el color de fondo debe cambiar y el icono debe ser reemplazado como se muestra en la imagen de abajo. estado normal y presionado

Cambiar el fondo no es problema usando un selector. Pero no puedo encontrar una forma sencilla de cambiar el icono. Lo que intenté fue añadir 2 iconos que se superponen entre sí:

<RelativeLayout android:layout_width="50dp" android:layout_height="50dp" android:padding="10dp" > <ImageView android:id="@+id/general_list_item_icon" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="centerInside" /> <ImageView android:id="@+id/general_list_item_icon_active" android:layout_width="fill_parent" android:layout_height="fill_parent" android:visibility="gone" /> </RelativeLayout> 

Entonces pongo un drawable en cada ImageView y quiero cambiar la visibilidad cuando el usuario presiona la fila. ¿Hay alguna posibilidad de hacerlo utilizando un selector similar al del fondo?

También: Como el ListView se rellena dinámicamente, el uso de un selector con referencias estáticas dibujables no funciona.

    2 Solutions collect form web for “Cambiar un icono en una entrada de Android ListView cuando se presiona”

    Puede utilizar setChoiceMode

     listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

    llame a este método antes de llamar al adaptador de conjunto. Y anular el método getview de su adaptador. Código de muestra.

     public View getView(int position, View convertView, ViewGroup parent) { if(convertView!=null){ ImageView img = (ImageView)convertView.findViewById(R.id.imageView1); if(mylist.isItemChecked(position)){ convertView.setBackgroundColor(Color.WHITE);// here you can set any color. img.setImageResource(R.drawable.img1);//img1 is stored in your rawable folder. }else{ convertView.setBackgroundColor(0); img.setImageResource(R.drawable.img2); } } return super.getView(position, convertView, parent); } 

    Espero que esto le dará la solución lo que desea. Todo lo mejor. Gracias.

    Esta es mi solución que funcionó para mí:

     public void setNavDrawerItemNormal() { for (int i=0; i< mDrawerList.getChildCount(); i++) { View v = mDrawerList.getChildAt(i); ImageView icon = ((ImageView) v.findViewById(R.id.icon)); icon.setImageResource(navMenuIcons.getResourceId(0, -1)); } } private class SlideMenuClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //adapter.notifyDataSetChanged(); setNavDrawerItemNormal(); if(view!=null) { ImageView img = (ImageView) view.findViewById(R.id.icon); img.setImageResource(R.drawable.abs__ic_go);//img1 is stored in your rawable folder. } // display view for selected nav drawer item displayView(position); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.