效果描述:
进入页面不刷新,swipeRefreshLayout不会显示出来的。
下拉就会出现刷新 icon:
如图
定制属于自己的刷新进度条:
api:
setColorSchemeColors (int... colors)
示例代码:
mSwipeLayout.setColorSchemeColors(Color.RED, Color.GREEN, Color.BLUE);
使用方法详解
模拟联网获取数据,然后停止刷新操作。涉及到EventBus跨进程传递数据。
1: 用户手动刷新,联网获取数据
mSwipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
/**
* 告诉开发者开始刷新了。
*/
@Override
public void onRefresh() {
// Toast.makeText(getContext(), "获取数据", Toast.LENGTH_SHORT).show();
new Thread() {
@Override
public void run() {
super.run();
try {
Thread.sleep(1000);
EventBus.getDefault().post("new data is coming");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
});
2:获取到数据停止刷新
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(String msg) {
mSwipeLayout.setRefreshing(false);
}
在使用swipeRefreshLayout时遇到的坑:
需求:刚进入页面时刷新加载数据
通常的思路是给swipeRefreshLayout设置监听,然后调用刷新方法swipeRefreshLayout.setRefreshing(true)刷新,在onRefresh()方法里监听加载数据;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mRecyclerView = (RecyclerView) view.findViewById(R.id.id_recycler_view_record);
mRefresh = (SwipeRefreshLayout) view.findViewById(R.id.id_refresh);
mRefresh.setOnRefreshListener(this);
mRefresh.setRefreshing(true);
}
@Override
public void onRefresh() {
getDataFromNet(0);
}
实践证明,并不会走监听方法;
改进思路:
一边刷新,一边实际去获取数据,刷新条只是障眼法,根据请求网络数据的情况,关闭刷新进度条;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mRecyclerView = (RecyclerView) view.findViewById(R.id.id_recycler_view_record);
mRefresh = (SwipeRefreshLayout) view.findViewById(R.id.id_refresh);
mRefresh.setOnRefreshListener(this);
initData();
}
private void initData() {
mRefresh.setRefreshing(true);
getDataFromNet(0);
}