studio programacion herramientas fundamentos con avanzado aplicaciones android listview drag-and-drop android-cursoradapter

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.