2012-04-04 24 views
5

Voglio avere una ListView che quando clicco sulla voce la vista scivola verso sinistra.Come animare l'elemento in ListView quando si fa clic su?

Così ho:

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

Tuttavia, l'animazione applicata al diverso elemento della lista, invece di quello che viene cliccato. Il comportamento sembra essere casuale come a volte è accaduto a più di un elemento allo stesso tempo.

Come sospetto, questo è dovuto al modo in cui l'adattatore riutilizza la vista per creare l'elemento. Sono andato a modificare il metodo getView nel mio adattatore per gonfiare la nuova vista ogni volta che viene chiamato. Quindi l'animazione non si verifica più.

C'è un modo per risolvere questo? Ho provato a spostare l'animazione all'interno del mio adattatore ma poi non posso associarlo ad altre azioni su Listview.

In definitiva, desidero che l'elemento sia selezionabile ma quando scorri verso sinistra/destra mostra il pulsante Elimina (comportamento di eliminazione iOS). Sono sulla strada sbagliata qui? Ciò dovrebbe essere possibile anche se Android può implementare lo scorrimento da rimuovere nella barra di notifica.

+0

"iOS delete behavior" NO NO NO NO! Android NON è iOS! Si prega di non utilizzare modelli di progettazione iOS. Gli utenti Android si aspettano e Android User Experience NON e l'esperienza iPhone. – slayton

+0

Capisco la tua preoccupazione. Sono totalmente contrario a questa idea me stesso. Ma non sono io che prendo la decisione qui. Ma devi ammetterlo però, scorri per rimuovere c'è su Android. L'implementazione è lì, solo una presentazione diversa. – RobGThai

+0

Il riquadro di notifica probabilmente ha un'implementazione personalizzata di un listview in quanto la classe listview di base non supporta questo passaggio per eliminare il comportamento – slayton

risposta

1

Si consiglia di controllare anche il thread this.

Non penso che questo sia possibile senza dover modificare l'adattatore per adattarsi a questo tipo di comportamento. Per quello che capisco, non hai alcun problema con l'implementazione del codice riconoscendo i gesti di scorrimento su diverse righe di ListView, solo con l'animazione il dovrebbe seguire questo gesto su una o più righe.

Vorrei riscrivere l'adattatore per adattarlo ad almeno 2 tipi di riga: righe normali e righe da eliminare. Nel metodo "getView()" dell'adattatore, è necessario riutilizzare solo convertView delle normali viste. Le righe che devono essere cancellate non devono riutilizzarle, in modo che l'animazione non modifichi le altre. Facendo clic su una riga normale, è necessario prima dire all'adattatore che la riga sulla posizione cliccata è ora di tipo da cancellare, chiamare .notifyDatasetChanged(), quindi avviare l'animazione su quella riga.

+0

Come si avvia un'animazione solo su quella riga? I'm View v = inflater.inflate (R.layout.list_view_custom, null); e quindi in un listener ho final Animazione animazione = AnimationUtils.loadAnimation (parent.getContext(), R.anim.fade_in_expand); v.startAnimation (animazione); Ma non succede nulla. – MinceMan

Problemi correlati