2012-07-21 35 views
14

Implemento el ActionMode en mi aplicación Android con ActionBarSherlock. Con ABS es posible construir un ActionMode antes de API 11 pero la manera fácil con: listView.setMultiChoiceModeListener(new MultiChoiceModeListener() ... no es para aplicaciones antes de API 11. ¿Alguien tiene una buena manera de crear un menú de contexto del modo de acción antes de API 11? Quiero hacer un clic largo en un elemento de la lista e iniciar el modo de acción en el que puedo hacer clic en varios elementos. Con un simple clic, muestro un sitio de detalles del elemento de la lista. Uso el método registerForContext() pero esto hace un clic simple y largo.MultiChoiceMode before API 11

Tiene a alguien un buen consejo para mí.

EDITAR
La solución para mi cuestión siguió: En un artículo largo haga clic en i activa el modo de acción y guardar esto en una variable. En el método de clic sobre el punto i implementar una instrucción if-else con:

if(actionMode == null) 
{ 
    // open new activity or update second fragment 
    showDetails(itemPosition); 
} 
else 
{ 
    // update ui or close CAB if no item selected 
    showCAB(itemPosition); 
} 

El método showCAB (posición) actualizar el contador de selectedItem, fondo elemento más destacado y así sucesivamente.

Respuesta

12

bien, acabo de hacer que hoy en día, gracias a ese sitio: http://www.miximum.fr/tutos/849-porting-the-contextual-anction-mode-for-pre-honeycomb-android-apps

Básicamente, sólo tiene que configurar su ChoiceMode ListView a ListView.CHOICE_MODE_MULTIPLE, para establecer un onItemClickListener que comprobar qué artículos se comprueban en el ListView y para crear una clase privada implementando ActionMode.Callback que administrará la barra de acción contextual.

¡Te dejo entrar en esa publicación para ver todo lo detallado y algunos códigos!

+0

Gracias por la respuesta. Encontré esta página también ayer e implemento la solución. Cambio el onItemClickListener a un onItemLongClickListener y esto no funciona tan bien. Puedo iniciar el Modo de Acción después de hacer un clic corto en un Artículo, cerrar mi actividad que se abre y luego presionar de nuevo sobre el ítem. La solución no es perfecta, pero es buena para empezar. – Happo

+0

Si entiendo bien su problema, es que todavía abre su actividad con un simple clic en los elementos de ListView. Luego, en su 'onItemLongClickListener', puede establecer' listView' 'onItemClickListener' en nulo, para que no abra ninguna actividad.Asegúrese de establecerlo de nuevo en el 'onItemClickListener' original (puede guardarlo en una variable) en' onDestroyActionMode' de la clase 'ModeCallback' – MagicMicky

+0

Antes de que se llame al método onItemClick, el evento pasó el método onItemLongClick. Este método devuelve un valor booleano, por lo tanto, si devuelvo true, se manejó el evento y no llegó al método onItemClick. Si devuelvo falso no manejé el clic largo y hago otro tipo de clic. Encontré esto en algunas otras preguntas, pero tu solución también es posible. Lo pruebo un poco más tarde hoy. – Happo

5

También puede echar un vistazo a Google I/O 2012 App. Es de código abierto, y usa ActionBarSherlock. Han desarrollado una versión de compatibilidad de ActionMode clases relacionadas que funcionan bien con ABS y dispositivos pre-honeycomb.

En particular, echar un vistazo a:

Básicamente , al igual que ABS, usan implementación nativa de ActionMode cuando está disponible y se recurre a la implementación personalizada en dispositivos más antiguos.

Espero que ayude!

+0

Tu información es realmente útil, gracias. Encontré este archivo también es útil cuando uso ActionMode y ActionBarActivity del paquete appcompat v7. http://iosched.googlecode.com/git/android/src/main/java/com/google/android/apps/iosched/ui/MultiSelectionUtil.java –