Forzar un elemento ListView para permanecer "presionado" después de haber hecho clic?

Tengo un ListView que abre otra actividad cuando se hace clic en una fila de elementos a través de un oyente onItemClick.

Me gustaría que la fila de permanecer en su estado presionado desde el momento en que se hace clic en el momento de la pantalla cambia a una nueva actividad. Creo que esto sería una experiencia más clara para el usuario y verá este tipo de cosas con la mayoría de los botones que abrir / cerrar diálogos o cambiar las actividades.

Intenté fijar view.setPressed (verdadero) en el oyente de onItemClick () pero parece ser llamado apenas un momento después de que el estado de la prensa cambió de nuevo a normal porque chasca levemente.

Por ejemplo:

mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { view.setPressed(true); //start an activity } }); 

Ese código casi funciona excepto para el parpadeo (el usuario presiona el elemento de la lista y se convierte en su estado presionado, entonces el usuario deja ir (completar el clic) y vuelve a su estado normal por una fracción de segundo antes de volver al estado presionado Desde la llamada setPressed (true)

¿Algunas ideas?

Gracias

Edit: Debo mencionar que estoy usando un selector xml drawable para definir los estados normales, presionados, seleccionados, etc para el fondo de la lista.

Tuve el mismo problema exacto a mucha frustración!

Sin embargo, se resuelve fácilmente sustituyendo state_pressed por state_selected . El estado presionado seguirá cambiando rápidamente antes de onItemClick() , pero como su tema no depende de state_pressed el parpadeo no será visible. Una vez en onItemClick() se establece state_selected y el elemento permanecerá seleccionado sin que se produzca ningún parpadeo.

Aquí está mi selector:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Selected Item --> <item android:state_selected="true" android:drawable="@color/list_pressed" /> <!-- Default Item --> <item android:state_selected="false" android:drawable="@android:color/list_default" /> </selector> 

Y mi onListItemClick (…):

 @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); v.setSelected(true); //TODO: add further actions here } 

La mejor manera de hacerlo antes de Android 3.0 es usar un estado personalizado en una vista personalizada o cambiar el color de fondo de la vista desde el adaptador. A partir de Android 3.0, puede utilizar el nuevo state_activated para mantener un elemento de lista seleccionado.

Desde el interior de un adaptador puede hacer referencia a la vista que desea cambiar el estado. Digamos que tiene un ListView con un título y una estrella (es decir, la estrella favorita) y que desea que se mantenga "seleccionado / presionado" cuando se toca. Anule su getView y haga algo como:

 @Override public View getView(int position, View convertView, ViewGroup parent) { final View view = super.getView(position, convertView, parent); final ImageButton favorite = (ImageButton) view.findViewById(R.id.favorite); favorite.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, "Star pressed..."); v.setSelected(!v.isSelected()); } }); return view; } 

Y su diseño ImageButton debe hacer referencia a un dibujable como este:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@android:drawable/star_big_on" /> <item android:state_pressed="true" android:drawable="@android:drawable/star_big_on" /> <item android:drawable="@android:drawable/star_big_off" /> </selector> 

Está utilizando xml para el selector. Verifique si ha dado correctamente el estado.
Mientras establezca view.setPressed(true) utilizará el drawable que está configurado para el estado android:state_pressed="true" like

 <item android:state_pressed="true" android:drawable="@color/gray" /> 

¿Ya ha intentado utilizar unscheduleDrawable en combinación con drawableStateChanged

Así que tal vez podría escuchar si el estado cambió y luego inmediatamente no programar y volver a presionar.

Tal vez ya no hay parpadeo.

En este ejemplo, el fondo se cambia después de pulsar el botón en un elemento de lista. http://androidforbeginners.blogspot.com/2010/03/clicking-buttons-in-listview-row.html

Usted puede hacer algo similar en onItemSelected () manipulando View que se ha pasado a esta llamada. Por lo general, la vista pasada es LinearLayout que contiene vistas de los niños como textView.

No utilice el selector XML. En su lugar, cambie manualmente las imágenes del elemento de lista. De esta manera usted podrá controlar la duración de una imagen en particular

  • ¿Es posible escribir un bucle for para asignar a los oyentes a muchos botones con la misma función donde se utilizan los últimos?
  • OnItemClickListener consume eventos onClickListener
  • Botón setonclicklistener error
  • ¿Por qué no AsyncTasks siempre funcionan dentro de un onClickListener?
  • Android Múltiples secuencias de clics en textview
  • OnClickListener en TranslateAnimation
  • Cambiar el drawableLeft del botón cuando se hace clic en el botón
  • Cómo evitar que la actividad se cargue dos veces al presionar el botón
  • Cómo desmarcar un elemento en gridview en segundo clic en android?
  • Haga clic en el elemento de lista de un ListView no responde
  • En EditText, aparece un diálogo al hacer clic en un subconjunto específico de texto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.