Come implementare Android Pull-to-Refresh

Nelle applicazioni Android come Twitter (app ufficiale), quando si incontra un ListView, è ansible tirarlo verso il basso (e rimbalzerà quando rilasciato) per aggiornare il contenuto.

Mi chiedo quale sia il modo migliore, secondo te, di attuarla?

  • Come controllare iso manualmente in camera2, Android
  • Localizzazione e disegni
  • Come recuperare un elenco di font disponibili / installati in android?
  • Calcolare la velocità utilizzando GPS in Android
  • AlertDialog con button positivo e validation EditText personalizzato
  • Quali filtri di intenti deve coprire la mia app per visualizzare i selezionatori quando richiesto un'image da un'applicazione esterna?
  • Alcune possibilità che potrei pensare:

    1. Un elemento in cima al ListView – tuttavia non credo che la scorrimento alla voce di posizione 1 (0-based) con l'animation in ListView è un task facile.
    2. Un'altra vista al di fuori del ListView – ma devo fare attenzione a spostare la posizione di ListView quando viene tirata e non sono sicuro se possiamo rilevare se il trascinamento tocca al ListView ancora veramente scorri gli elementi presenti nel ListView.

    Qualche raccomandazione?

    PS Mi chiedo quando viene rilasciato il codice sorgente ufficiale di Twitter. È stato detto che sarà rilasciato, ma è passato 6 mesi e da allora non ne abbiamo sentito parlare.

  • Query dell'elenco Android
  • Aggiungi gcm.jar in Eclipse IDE (Google Cloud Messaging)
  • Come usare l'espressione regolare in android
  • Come mostrare la tastiera Android con la modalità dei simboli per impostazione predefinita?
  • android.content.res.Resources $ NotFoundException: String ID risorsa # 0x0
  • Il test di scimmia Android sceglie un'attività specifica
  • 14 Solutions collect form web for “Come implementare Android Pull-to-Refresh”

    Infine, Google ha rilasciato una versione ufficiale della libreria pull-to-refresh!

    Viene chiamato SwipeRefreshLayout, all'interno della libreria di supporto e la documentazione è qui:

    https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html

    Ho fatto un tentativo di implementare un tirante per aggiornare il componente, non è completo, ma dimostra una ansible implementazione, https://github.com/johannilsson/android-pulltorefresh .

    La logica principale è implementata in PullToRefreshListView che estende ListView . Internamente controlla lo scorrimento di una vista intestazione utilizzando smoothScrollBy (API Level 8). Il widget è ora aggiornato con il supporto per 1.5 e versioni successive, per favore leggi il README per 1.5 supporto però.

    Nel tuo layout puoi semplicemente aggiungere come questo.

     <com.markupartist.android.widget.PullToRefreshListView android:id="@+id/android:list" android:layout_height="fill_parent" android:layout_width="fill_parent" /> 

    Ho anche implementato una libreria robusta, open source, facile da usare e altamente personalizzabile di PullToRefresh per Android. È ansible sostituire il proprio ListView con PullToRefreshListView come descritto nella documentazione della pagina di progetto.

    https://github.com/erikwt/PullToRefresh-ListView

    Il modo più semplice penso sia quello fornito dalla libreria di supporto Android:

    android.support.v4.widget.SwipeRefreshLayout;

    una volta importto, è ansible definire il layout come segue:

      <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/refresh" android:layout_height="match_parent" android:layout_width="match_parent"> <android.support.v7.widget.RecyclerView xmlns:recycler_view="http://schemas.android.com/apk/res-auto" android:id="@android:id/list" android:theme="@style/Theme.AppCompat.Light" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/button_material_light" > </android.support.v7.widget.RecyclerView> </android.support.v4.widget.SwipeRefreshLayout> 

    Suppongo che utilizzi la vista del riciclatore anziché la list. Tuttavia, la list ancora funziona in modo da basta sostituire recyclerview con listview e aggiornare i riferimenti nel codice java (frammento).

    Nel frammento di attività, è necessario implementare l'interface, SwipeRefreshLayout.OnRefreshListener : i, e

     public class MySwipeFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener{ private SwipeRefreshLayout swipeRefreshLayout; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_item, container, false); swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.refresh); swipeRefreshLayout.setOnRefreshListener(this); } @Override public void onRefresh(){ swipeRefreshLayout.setRefreshing(true); refreshList(); } refreshList(){ //do processing to get new data and set your listview's adapter, maybe reinitialise the loaders you may be using or so //when your data has finished loading, cset the refresh state of the view to false swipeRefreshLayout.setRefreshing(false); } } 

    Spero che questo aiuta le masse

    In questo collegamento puoi trovare una forchetta della famosa vista PullToRefresh che presenta nuove implementazioni interessanti come PullTorRefreshWebView o PullToRefreshGridView o la possibilità di aggiungere un PullToRefresh sul bordo inferiore di un elenco.

    https://github.com/chrisbanes/Android-PullToRefresh

    E il meglio di questo è che il lavoro perfetto in Android 4.1 (il normale PullToRefresh non funziona)

    Ho un modo molto semplice per farlo, ma adesso sono sicura che sia il modo sciocco. C'è il mio codice PullDownListView.java

     package com.myproject.widgets; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.ListView; /** * @author Pushpan * @date Nov 27, 2012 **/ public class PullDownListView extends ListView implements OnScrollListener { private ListViewTouchEventListener mTouchListener; private boolean pulledDown; public PullDownListView(Context context) { super(context); init(); } public PullDownListView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public PullDownListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { setOnScrollListener(this); } private float lastY; @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { lastY = ev.getRawY(); } else if (ev.getAction() == MotionEvent.ACTION_MOVE) { float newY = ev.getRawY(); setPulledDown((newY - lastY) > 0); postDelayed(new Runnable() { @Override public void run() { if (isPulledDown()) { if (mTouchListener != null) { mTouchListener.onListViewPulledDown(); setPulledDown(false); } } } }, 400); lastY = newY; } else if (ev.getAction() == MotionEvent.ACTION_UP) { lastY = 0; } return super.dispatchTouchEvent(ev); } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { setPulledDown(false); } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } public interface ListViewTouchEventListener { public void onListViewPulledDown(); } public void setListViewTouchListener( ListViewTouchEventListener touchListener) { this.mTouchListener = touchListener; } public ListViewTouchEventListener getListViewTouchListener() { return mTouchListener; } public boolean isPulledDown() { return pulledDown; } public void setPulledDown(boolean pulledDown) { this.pulledDown = pulledDown; } } 

    Devi solo implementare ListViewTouchEventListener sulla tua attività in cui vuoi utilizzare questo ListView e impostare l'ascoltatore

    Ho implementato in PullDownListViewActivity

     package com.myproject.activities; import android.app.Activity; import android.os.Bundle; /** * @author Pushpan * */ public class PullDownListViewActivity extends Activity implements ListViewTouchEventListener { private PullDownListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); listView = new PullDownListView(this); setContentView(listView); listView.setListViewTouchListener(this); //setItems in listview } public void onListViewPulledDown(){ Log.("PullDownListViewActivity", "ListView pulled down"); } } 

    Per me funziona ๐Ÿ™‚

    Per implementare Android Pull-to-Refresh prova questo codice,

     <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/pullToRefresh" android:layout_width="match_parent" android:layout_height="wrap_content"> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </android.support.v4.widget.SwipeRefreshLayout> 

    Classe attività:

     ListView lv = (ListView) findViewById(R.id.lv); SwipeRefreshLayout pullToRefresh = (SwipeRefreshLayout) findViewById(R.id.pullToRefresh); lv.setAdapter(mAdapter); pullToRefresh.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { // TODO Auto-generated method stub refreshContent(); } }); private void refreshContent(){ new Handler().postDelayed(new Runnable() { @Override public void run() { pullToRefresh.setRefreshing(false); } }, 5000); } 

    Nessuno ha menzionato il nuovo tipo di "Pull to refresh" che si mostra in cima alla barra degli strumenti come nell'app Google ora o Gmail.

    C'è una libreria ActionBar-PullToRefresh che funziona esattamente lo stesso.

    Notare che ci sono problemi UX a cui affrontare quando si implementano Android e WP.

    "Un ottimo indicatore per i motivi per cui i progettisti / devs non dovrebbero attuare pull-to-refresh nelle applicazioni iOS di stile è come Google e le loro squadre non utilizzano pull-to-refresh su Android mentre lo utilizzano in iOS".

    https://plus.google.com/109453683460749241197/posts/eqYxXR8L4eb

    Se non vuoi che il tuo programma assomigli ad un programma iPhone che è forzato in Android, cerchi un aspetto e un aspetto più nativi e fai qualcosa di simile a Gingerbread:

    alt text

    Ho scritto una chiave per aggiornare il componente qui: https://github.com/guillep/PullToRefresh Funziona l'evento se l'elenco non dispone di elementi e l'ho testato su> 1.6 cellulari android.

    Qualsiasi suggerimento o miglioramento è apprezzato ๐Ÿ™‚

    Penso che la migliore libreria sia: https://github.com/chrisbanes/Android-PullToRefresh .

    Lavora con:

     ListView ExpandableListView GridView WebView ScrollView HorizontalScrollView ViewPager 

    Per get l'ultima aggiornamento di Lollipop Pull-To:

    1. Scarica l'ultima libreria Lollipop SDK e Extras / Android
    2. Impostare l'objective di generazione del progetto su Android 5.0 (altrimenti il ​​pacchetto di supporto può avere errori con le risorse)
    3. Aggiorna le libs / android-support-v4.jar alla versione 21
    4. Utilizza android.support.v4.widget.SwipeRefreshLayout plus android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener

    Guida dettagliata potrebbe essere trovata qui: http://antonioleiva.com/swiperefreshlayout/

    Inoltre per ListView consiglio di leggere su canChildScrollUp() nei commenti;)

    Molto interessante Pull-to-Refresh di Yalantis . Gif per iOS, ma puoi controllarlo ๐Ÿ™‚

     <com.yalantis.pulltorefresh.library.PullToRefreshView android:id="@+id/pull_to_refresh" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/list_view" android:divider="@null" android:dividerHeight="0dp" android:layout_width="match_parent" android:layout_height="match_parent" /> 

    L'Android รจ un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e cosรฌ via.