Est-il possible de déclencher la SwipeRefreshLayout
par programme? L'animation doit démarrer et la méthode onRefresh
de l'interface OnRefreshListener
doit être appelée.
si vous utilisez le nouveau swipeRefreshLayout présenté dans la version 5.0
En tant qu’image montrée ci-dessus, il vous suffit d’ajouter la ligne suivante pour déclencher par programme la mise à jour du balayage
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing(true);
}
});
si vous appelez simplement
mSwipeRefreshLayout.setRefreshing(true);
cela ne déclenchera pas l'animation du cercle, donc en ajoutant la ligne ci-dessus, il suffit de faire un délai dans le thread d'interface utilisateur pour qu'il affiche l'animation du cercle à l'intérieur du thread ui.
En appelant mSwipeRefreshLayout.setRefreshing(true)
, la OnRefreshListener
sera NE sera PAS exécuté
Pour arrêter l'appel de l'animation de chargement circulaire mSwipeRefreshLayout.setRefreshing(false)
Afin de déclencher SwipeRefreshLayout j'ai essayé cette solution:
SwipeRefreshLayout.OnRefreshListener swipeRefreshListner = new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Log.i(TAG, "onRefresh called from SwipeRefreshLayout");
// This method performs the actual data-refresh operation.
// The method calls setRefreshing(false) when it's finished.
loadData();
}
};
Maintenant élément clé:
swipeLayout.post(new Runnable() {
@Override public void run() {
swipeLayout.setRefreshing(true);
// directly call onRefresh() method
swipeRefreshListner.onRefresh();
}
});
Juste pour forcer ajouter ces deux pour permettre le geste de glisser
swipeRefreshLayout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Log.i(TAG, "onRefresh called from SwipeRefreshLayout");
// This method performs the actual data-refresh operation.
// The method calls setRefreshing(false) when it's finished.
FetchData();
}
}
);
Vous pouvez appeler la méthode onRefresh () par programme puis, à l'intérieur de la méthode, démarrez l'animation si ce n'est déjà fait. Voir ce qui suit:
@Override
public void onRefresh() {
if (!mSwipeRefreshLayout.isRefreshing()) mSwipeRefreshLayout.setRefreshing(true);
//TODO
}