Is er een manier om de SwipeRefreshLayout
programmatisch te activeren? De animatie zou moeten starten en de onRefresh
-methode van de OnRefreshListener
-interface zou moeten worden aangeroepen.
Antwoord 1, autoriteit 100%
als je de nieuwe swipeRefreshLayout gebruikt die is geïntroduceerd in 5.0
Zoals de afbeelding hierboven, hoeft u alleen maar de volgende regel toe te voegen om de swipe-vernieuwingslay-out programmatisch te activeren
Werk
in Java:
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing(true);
}
});
aan in Kotlin:
mSwipeRefreshLayout.post { mSwipeRefreshLayout.isRefreshing = true }
WERKT NIET
als je gewoon Java aanroept:
mSwipeRefreshLayout.setRefreshing(true);
of in Kotlin
mSwipeRefreshLayout.isRefreshing = true
het activeert de cirkel niet om te animeren, dus door de bovenstaande regel toe te voegen, maak je een vertraging in de UI-thread zodat de cirkelanimatie in de ui-thread wordt weergegeven.
Door mSwipeRefreshLayout.setRefreshing(true)
aan te roepen, wordt de OnRefreshListener
NIET uitgevoerd
Om de cirkelvormige laadanimatie te stoppen, belt u mSwipeRefreshLayout.setRefreshing(false)
Antwoord 2, autoriteit 19%
Om SwipeRefreshLayout te activerenheb ik deze oplossing geprobeerd:
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();
}
};
Nubelangrijk onderdeel:
swipeLayout.post(new Runnable() {
@Override public void run() {
swipeLayout.setRefreshing(true);
// directly call onRefresh() method
swipeRefreshListner.onRefresh();
}
});
Antwoord 3
Beetje laat voor de discussie, maar je hoeft hiervoor geen Runnable te starten. U kunt eenvoudig de vernieuwing activeren en uw onRefresh-methode rechtstreeks in onCreate aanroepen, of waar u maar wilt:
class MyFragment: SwipeRefreshLayout.OnRefreshListener {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initViews()
}
fun initViews() {
swipe_refresh_layout?.apply {
setOnRefreshListener(this@MyFragment)
isRefreshing = true
onRefresh()
}
}
override fun onRefresh() {
// Do my refresh logic here
}
}