1.介绍:使用SwipeRefreshLayout可以实现下拉刷新,前提是布局里需要包裹一个可以滑动的子控件(比如RecyclerView),
即想要实现下拉刷新的控件要放到SwipeRefreshLayout中,然后在代码里设置OnRefreshListener设置监听,最后在监听里设置
刷新时事件。
2.方法介绍
(1)isRefreshing():判断当前的状态是否是刷新状态。
(2)setColorSchemeResources(int... colorResIds):
设置下拉进度条的颜色主题,参数为可变参数,并且是资源id,可以设置多种不同的颜色,最多设置四种,每转一圈就显示一种颜色。
(3)setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener):
设置监听,需要重写onRefresh()方法,顶部下拉时会调用这个方法,在里面实现请求数据的逻辑及设置下拉进度条消失
(4)setProgressBackgroundColorSchemeResource(int colorRes)
设置下拉进度条的背景颜色,默认白色。
(5)setRefreshing(boolean refreshing)
设置刷新状态,true表示正在刷新,false表示取消刷新。
(6)isRefreshing():检查是否处于刷新状态
3.布局文件
<!--下拉刷新--> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/design_rl_swirl" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <!--layout_behavior指定布局行为--> <android.support.v7.widget.RecyclerView android:id="@+id/design_rl_recy_view" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> </android.support.v7.widget.RecyclerView> </android.support.v4.widget.SwipeRefreshLayout>
4.设置监听
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.design_rl_swirl); swipeRefreshLayout.setColorSchemeColors(getResources().getColor(R.color.colorAccent)); swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { refreshFruit(); //响应的刷新逻辑 } });
一般onRefresh中是去网络请求最新的数据,再讲数据显示出来
private void refreshFruit(){ new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } //切换到主线程 runOnUiThread(new Runnable() { @Override public void run() { initFruit(); fruitAdapter.notifyDataSetChanged(); swipeRefreshLayout.setRefreshing(false); //刷新结束,隐藏进度条 } }); } }).start(); }