Estaba buscando una ListPreference en la que el usuario puede cambiar el orden de los elementos de una lista. Los elementos serían arrastrables y el usuario puede reordenarlos.¿Cómo hacer un ListView con elementos que se pueden arrastrar?
Vi esto en mi ROM personalizada (y estoy casi seguro de haberlo visto en Cyanogenmod) para el QuickPanel. Aquí hay una captura de pantalla para conseguir la idea a través de:
sé lo que puedo hacer que los elementos de ListView costumbre y establecer el icono para indicar que los artículos se pueden arrastrar, pero no sé cómo hacer que se pueda arrastrar y cambia el orden en consecuencia. En cuanto a guardarlos en las preferencias, encontré this que podría implementarse fácilmente.
PS: Sé CyanogenMod es de código abierto, pero no pude encontrar la fuente de esta cosa en particular :(Lo más cerca que pude conseguir fue this, que debe estar en algún lugar cerca de la otra pantalla ...
Gracias de antemano por cualquier consejo sobre este
ACTUALIZACIÓN:. terminé usando los archivos de la respuesta aceptada, con las adiciones y modificaciones que les estoy enumerando aquí para mayor referencia
-
..
Use un adaptador personalizado (ArrayAdapter en mi caso), para implementar la retroalimentación visual de que este elemento es arrastrable, que es un ImageView cerca de TextView. Esto es opcional
Establezca un DragListener y RemoveListener para actualizar la lista en consecuencia. ListView no hace eso automáticamente. Y depende del adaptador que esté usando.
Hubo una línea que arrojó una Vista a un Grupo de Vista, cometió algunos errores, por lo que quité el elenco sin ningún problema, no fue necesario. (en el método onInterceptTouchEvent).
Cambie
mRemoveMode = 1;
en el constructor de TouchInterceptor, o uno de:FLING = 0; SLIDE = 1; TRASH = 2;
. Creo que paraTRASH
, un recurso debería estar disponible también.
De hecho, me tomó el archivo no desde el enlace de la respuesta, pero desde el CyanogenMod uno, que ya tenía, pero supongo que estos archivos son los mismos.
Estos son los archivos reales en el proyecto (al R12, en el momento de la escritura):
- The Preference using this ListView
- The ListActivity with the listeners and the Adapter
- The actual ListView
espero que ayude a otra persona :)
No hay una función estándar para esto, por lo que debe anular la función Toque y detectar el evento táctil. Probablemente su anulación esté activada por un evento longClick; de lo contrario, no sabrá si el usuario desea arrastrar un elemento o desplazarse por la lista. – Christine
@Christine ¿No puedo usar [OnDragListener] (http://developer.android.com/reference/android/view/View.OnDragListener.html)? – jadkik94
@ jadkik94 Hola. Estoy tratando de implementar lo mismo usando estos archivos. Pero dado que es una pregunta bastante antigua, me preguntaba si existe o no un método mejor o más conveniente para implementar una lista que se pueda arrastrar. No pude encontrar ninguno sin embargo. Apreciará cualquier sugerencia que pueda dar ... Gracias. – Anjani