有没有什么办法以编程方式触发SwipeRefreshLayout
?应该启动动画,并调用OnRefreshListener
接口中的onRefresh
方法。以编程方式SwipeRefreshLayout触发器
回答
,如果您使用的是5.0
intoduced新swipeRefreshLayout如图像上面,你只需要添加以下行来触发刷卡刷新布局编程
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing(true);
}
});
,如果你简单地调用
mSwipeRefreshLayout.setRefreshing(true);
它不会触发圆圈动画,所以通过添加上面的行你只是延迟UI d以便它显示ui线程内的圆形动画。
通过调用mSwipeRefreshLayout.setRefreshing(true)
的OnRefreshListener
将得不到执行
为了阻止圆形加载动画调用mSwipeRefreshLayout.setRefreshing(false)
我喜欢在文档中没有提到这个吗?我一直有无尽的负载迹象不显示。是否可以从UI线程调用'.setRefreshing(false)'? – Zapnologica
@Zapnologica:是的,你可以。我从我的AsyncTask的onPostExecute调用它,它是在onRefresh()中触发的。 – AgentKnopf
@Ramz我尝试了你的代码片段 - 微调器显示,但不像你提到的,当我像你一样手动调用setRefreshing(true)时,我的片段实现的onRefresh回调没有被调用(Motorola Moto X 2014 Android 5+)。所以我必须设置微调刷新并手动调用onRefresh回调来执行我的刷新代码。 – AgentKnopf
为了触发SwipeRefreshLayout我试过这个解决方案:
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();
}
};
现在关键部分:
swipeLayout.post(new Runnable() {
@Override public void run() {
swipeLayout.setRefreshing(true);
// directly call onRefresh() method
swipeRefreshListner.onRefresh();
}
});
正如hac.jack之前回答的评论中提到的那样,SwipeRefreshLayout似乎存在一个错误。有一个由setRefreshing(布尔刷新)调用的内部方法setRefreshing(boolean refreshing,boolean notify)。 notify参数默认设置为false,因此OnRefreshListener从不更新。这个答案对于更新侦听器是正确的。 – Zac
swipeRefreshLayout.setOnRefreshListener( 新SwipeRefreshLayout.OnRefreshListener(){ @Override 公共无效onRefresh(){ Log.i(TAG, “onRefresh从SwipeRefreshLayout称为”); //该方法执行实际的数据刷新 } );该方法在完成时调用setRefreshing(false)。 – Goodlife
只是为了迫使在添加此两ennable滑动手势
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();
}
}
);
你可以叫onRefresh()方法以编程,然后在方法内部启动动画,如果它尚未启动。看到以下内容:
@Override
public void onRefresh() {
if (!mSwipeRefreshLayout.isRefreshing()) mSwipeRefreshLayout.setRefreshing(true);
//TODO
}
- 1. 以编程方式触发segue
- 2. 以编程方式触发UIAlertController的UIAlertAction
- 3. 以编程方式触发ngf-select
- 4. 以编程方式触发ControlValueAccessor的registerChange?
- 5. 以编程方式触发listener.GetContext()
- 6. 以编程方式触发didEndOnExit
- 7. 以编程方式触发MouseLeftButtonDown事件
- 8. 以编程方式触发ACTION_POINTER_DOWN事件
- 9. 如何以编程方式触发`valueChanges`?
- 10. 以编程方式触发ontouch事件
- 11. 如何以编程方式触发seque?
- 12. 如何以编程方式触发OnTouchListener
- 13. jQuery以编程方式触发事件
- 14. jQuery - 以编程方式触发事件
- 15. 以编程方式触发Sitecore事件
- 16. 以编程方式触发ResponsiveSlides.js
- 17. 以编程方式触发SlideToggle jquery
- 18. Sqlite:以编程方式创建触发器
- 19. 钛以编程方式触发搜索栏的过滤器
- 20. ASP.NET实体框架 - 以编程方式创建触发器
- 21. 以编程方式删除定时触发器的问题
- 22. 如何以编程方式添加UpdatePanel及其触发器?
- 23. 以编程方式触发FineUploader中的文件浏览器
- 24. 如何以编程方式将触发器添加到ASP.NET UpdatePanel?
- 25. Flex:以编程方式触发事件监听器
- 26. 以编程方式更改WPF风格(带触发器)
- 27. 如何以编程方式创建触发器对象?
- 28. 如何以编程方式触发媒体扫描器?
- 29. jquery - 以编程方式触发侦听器
- 30. 如何以编程方式触发方法“tabBarController:didSelectViewController:”?
那么,这似乎是不可能的。在我的情况下,我必须调用'mSwipeRefreshLayout.setRefreshing(true);'并且新建一个AsyncTask的实例,然后手动执行它。当然,我把它们放在一个名为'doRefresh()'和'onRefresh()'的方法中,它调用'doRefresh()' –
[如何在Android中触发swiperefreshlayout?](http://stackoverflow.com/questions/26513315/how-to-trigger-swiperefreshlayout-in-android) – opticod
@opticod一个问题是如何被问及早于'可能'复制重复? – Niklas