2014-06-07 12 views
12

Sono abbastanza nuovo per Android e sto esplorando il codice di esempio sul sito web di Google. Il codice attualmente attivo è il SwipeRefreshLayout: http://developer.android.com/samples/SwipeRefreshLayoutBasic/index.htmlSwipeRefreshLayout: Swipe avanzamento animazione

Nel codice, vediamo SwipeRefreshLayout eseguito per un listview, quindi in altre parole, se si trascina verso il basso la vista elenco, il metodo viene attivato e il listview si rinfresca

<android.support.v4.widget.SwipeRefreshLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/swiperefresh" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    <ListView 
      android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

</android.support.v4.widget.SwipeRefreshLayout> 

Ciò che mi confonde è che non v'è alcuna disposizione nel codice per la barra di un'animazione di avanzamento che viene visualizzata nella parte superiore della listview quando si trascina verso il basso. Pensi che SwipeRefreshLayout generi automaticamente una barra di animazione di avanzamento quando la trascini verso il basso senza che l'utente debba specificare alcun layout in xml per esso?

Ad esempio, se si desidera inserire il riempimento su entrambe le estremità della barra di animazione di avanzamento, in modo che l'animazione non tocchi le estremità dello schermo quando si aggiorna, come si farebbe?

Il https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html non dice nulla al riguardo.

risposta

24

non è possibile modificare l'animazione.

In SwipeRefreshLayout non è possibile personalizzare molto; Credo che questo sia un tentativo di Google di far aderire gli sviluppatori a modelli comuni. Quello che puoi stile sono i quattro colori dell'animazione, specificati con setColorScheme().

SwipeRefreshLayout si preoccupa di mostrare l'animazione predefinita nella parte superiore. Questo può accadere quando canChildScrollUp() restituisce false e l'utente "abbassa" o quando imposta setRefreshing(true). Disattiva l'animazione con setRefreshing(false). Metti la tua logica nel metodo onRefreshing() del listener. Sostituisci canChildScrollUp() se inserisci qualcosa che non è un ListView nel tuo SwipeRefreshLayout. Dovresti essere buono per andare da qui.

+0

Grazie. Penso che tu abbia ragione, non c'è molto da personalizzare oltre a impostare il colore della barra di avanzamento. Sai anche se la classe SwipeRefreshLayout attiva automaticamente il metodo notifyDataChanged() per listview? Il listview viene aggiornato automaticamente dopo 3 secondi dall'esecuzione dell'abbandono tramite il metodo mListAdapter.add (formaggio), tuttavia il metodo notifyDataChanged() non è mai stato chiamato per notificare la lista delle modifiche ai suoi dati. – Simon

+0

No, non è così. È possibile controllare il codice, cercare 'SwipeRefreshLayout.java' nella directory sdk. È necessario aver installato il codice sorgente per l'ultima revisione della libreria di supporto v4 (versione 19.1.0) –

+0

Quindi suppongo che la visualizzazione lista venga automaticamente aggiornata da quando i dati vengono aggiunti alla scheda: mListAdapter.add (formaggio)? – Simon

10

anche se non si può cambiare, è ancora possibile nasconderlo e quindi visualizzare il proprio una volta innescato :-)

SwipeRefreshLayout swiperefresh = (SwipeRefreshLayout)root.findViewById(R.id.swiperefresh); 
swiperefresh.setOnRefreshListener(this); 
swiperefresh.setColorSchemeColors(0,0,0,0); 
swiperefresh.setProgressBackgroundColor(android.R.color.transparent); 

Note:

  • in Eclipse è necessario aggiungere @ SuppressLint ("ResourceAsColor") per compilare questo.

  • è ancora necessario chiamare setRefreshing (falso) in un punto appropriato nel tempo altrimenti onRefresh non si attiva nuovamente.

Problemi correlati