android-swipeRefreshLayout使用详解

来源:互联网 发布:微信和淘宝合作了 编辑:程序博客网 时间:2024/04/29 06:04

效果描述:

进入页面不刷新,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);    }










0 0
原创粉丝点击