android - programacion - Clasificación de arrastrar y soltar del adaptador de cursor y el adaptador de lista
manual de android en pdf (3)
Estoy muy sorprendido de que haya una cantidad tan pequeña de información sobre la clasificación de arrastrar y soltar con un adaptador de cursor y un adaptador de lista.
La publicación más cercana que he encontrado en stackoverflow es esta:
https://stackoverflow.com/a/5047618/317889
Pero, no me queda claro cómo implementar lo que sugiere CommonsWare; la aclaración sería muy útil.
Hasta ahora estoy enlazando los datos del cursor a un adaptador de lista y configurando esto de la siguiente manera:
mMyCursorAdapter = new MyCursorAdapter(getActivity(), null);
setListAdapter(mMyCursorAdapter);
getLoaderManager().initLoader(0, null, this);
La lista se genera, pero ahora deseo agregar la funcionalidad de arrastrar y soltar a los elementos de la lista.
Me gustaría saber la mejor manera de hacerlo desde un punto de vista arquitectónico y cualquier sugerencia sobre cómo desarrollar el funcionamiento de la funcionalidad principal también sería útil.
Aquí hay una biblioteca que con suerte resolverá su problema, permite arrastrar y soltar la ordenación de los elementos de la lista. Tiene una excelente demostración que incluye casos de uso para Fragments
y Cursors
https://github.com/bauerca/drag-sort-listview
Características clave:
- Limpiar arrastrar y soltar (sin fallos visuales; espero!)
- Desplazamiento intuitivo y suave mientras se arrastra.
- Soporte para alturas de elementos heterogéneos.
- Métodos públicos startDrag () y stopDrag ().
- Interfaz pública para personalizar la vista flotante.
Esto definitivamente se puede lograr y afortunadamente para usted, la mayor parte del trabajo ya se ha realizado, pero tendrá que modificar una clase ligeramente para cumplir con sus especificaciones.
La aplicación de música predeterminada de Android tiene todas las clases que necesitarás.
Primero, tendrás que tomar su ListView
personalizado que permite arrastrar y soltar.
Eso se puede encontrar aquí - TouchInterceptor.java .
También necesitarás agarrar su Cursor
personalizado que se usa para mover los elementos en tu ListView
. Es una clase interna llamada NowPlayingCursor
.
Eso se puede encontrar aquí - TrackBrowserActivity.java
NowPlayingCursor
extiende AbstractCursor
y se usa para devolver la cola. El método makeNowPlayingCursor()
es makeNowPlayingCursor()
donde escribirá la mayoría de su propio código. En lugar de devolver la cola, deberás devolver los elementos que te interesó mover, cualquiera que sea.
Para utilizar el TouchInterceptor
, deberá implementar TouchInterceptor.DropListener
.
private TouchInterceptor.DropListener mDropListener =
new TouchInterceptor.DropListener() {
public void drop(int from, int to) {
final NowPlayingCursor mNowPlayingCursor = (NowPlayingCursor) YOUR_CURSOR;
mNowPlayingCursor.moveItem(from, to);
// Call `notifyDataSetChanged` here.
}
};
También debe buscar el método moveQueueItem
utilizado para mover un elemento de un índice a otro. Este método se usa en el onMove
cuando se llama onMove
y moveItem
.
Eso se puede encontrar aquí - MediaPlaybackService.java
Por lo tanto, hay algo de trabajo que hacer por tu parte, pero esto es definitivamente posible.
Esta publicación del blog de Jason McReynolds (incluido un proyecto de muestra ) me ayudó mucho.
Explica cómo usar la biblioteca Drag-Sort-ListView Vista de Carl A. Bauer con un CursorAdapter y SqLite. También muestra cómo guardar el estado recién ordenado de ListView en la base de datos.