2012-04-04 17 views
5

Quiero tener un ListView que cuando hago clic en el elemento, la vista se desliza hacia la izquierda.Cómo animar un elemento en ListView cuando se hace clic en él?

por lo que tengo:

listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      arg1.startAnimation(openAnimation); 
     } 
    }); 

Sin embargo, la animación aplicarán a los distintos elementos de la lista en lugar de la que está hecho clic en. El comportamiento parece ser aleatorio ya que en algún momento le pasó a más de un elemento al mismo tiempo.

Como sospechaba, esto se debe a la forma en que el adaptador reutiliza su vista para crear un elemento. Fui a modificar el método getView en mi adaptador para inflar una nueva vista cada vez que se llama. Entonces la animación ya no ocurre.

¿Hay alguna manera de resolver esto? Traté de mover la animación dentro de mi Adaptador pero luego no puedo asociarla con otra acción en Listview.

En última instancia, quiero que se pueda hacer clic en el elemento, pero al deslizar hacia la izquierda/derecha aparece el botón Eliminar (comportamiento de eliminación de iOS). ¿Estoy en el camino equivocado aquí? Esto debería ser posible, aunque Android puede implementar deslizar para eliminar en la barra de notificaciones.

+0

"Comportamiento de eliminación de iOS" NO NO NO NO! Android no es iOS Por favor, no use patrones de diseño de iOS. Los usuarios de Android esperan experiencia de usuario de Android y la experiencia de iPhone. – slayton

+0

Entiendo su preocupación. Estoy totalmente en contra de esta idea yo mismo. Pero yo no soy quien toma la decisión aquí. Pero tienes que admitirlo, desliza para eliminar está allí en Android. La implementación está ahí, solo una presentación diferente. – RobGThai

+0

El panel de notificaciones probablemente tenga una implementación personalizada de una vista de lista, ya que la clase básica de vista de lista no admite este deslizamiento para eliminar el comportamiento – slayton

Respuesta

1

Recomiendo que marque this hilo también.

No creo que esto sea posible sin tener que modificar su adaptador para adaptarse a este tipo de comportamiento. Por lo que entiendo, no tienes ningún problema con la implementación del código que reconoce los gestos de deslizamiento en diferentes filas de ListView, solo con la animación el debe seguir este gesto según las filas.

Yo volvería a escribir el adaptador para adaptarse a al menos 2 tipos de filas: filas normales, y las filas que se eliminarán. En el método "getView()" de su adaptador, solo debe volver a usar la vista convertida de Vistas normales. Las filas que se van a eliminar no deben reutilizarlas, por lo que animar una no modificaría las demás. Al hacer clic en una fila normal, primero debe decirle al adaptador que la fila en la posición cliqueada ahora es del tipo que debe borrarse, llamar a .notifyDatasetChanged() y luego iniciar la animación en esa fila.

+0

¿Cómo comienzo una animación solo en esa fila? Soy View v = inflater.inflate (R.layout.list_view_custom, null); y luego en un oyente tengo Animación de animación final = AnimationUtils.loadAnimation (parent.getContext(), R.anim.fade_in_expand); v.startAnimation (animación); Pero no pasa nada. – MinceMan

Cuestiones relacionadas