RecyclerView的下拉刷新

谷歌为了让Android的下拉刷新风格能有一个统一的标准,于是在Material Design中制定了一个官方的设计规范。当然我们不需要去深入了解这个规范到底是什么样的,因为谷歌早就提供好了现成的控件,我们在项目中直接使用就行了。
效果图:


SwipeRefreshLayout就是用于实现下拉刷新功能的核心类,它是由support-v4库提供的。我们把想要实现的下拉刷新功能的控件放置到SwipeRefreshLayout中,就可以迅速让这个控件支持下拉刷新。

修改activity_main.xml中的代码,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <android.support.v4.widget.DrawerLayout
        ...
            <android.support.v4.widget.SwipeRefreshLayout
                android:id="@+id/swipe_refresh"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_behavior="@string/appbar_scrolling_view_behavior">
                    <android.support.v7.widget.RecyclerView
                        android:id="@+id/recycler_view"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent">
                    </android.support.v7.widget.RecyclerView>
            </android.support.v4.widget.SwipeRefreshLayout>
            <android.support.design.widget.FloatingActionButton
               .../>
        </android.support.design.widget.CoordinatorLayout>
        ...
    </android.support.v4.widget.DrawerLayout>
</LinearLayout>

可以看到在RecyclerView的外面又嵌套了一层SwipeRefreshLayout,这样RecyclerView就自动拥有下拉刷新功能了。接下来在代码中处理具体的刷新逻辑,修改MainActivity中的代码,如下所示:

public class MainActivity extends AppCompatActivity {

   ...
    @InjectView(R.id.swipe_refresh)
    SwipeRefreshLayout swipeRefresh;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       ...
        dialog = ProgressDialog.show(this, null, "玩命加载中.....");
        getMessage();
        //下拉刷新
        swipeRefresh.setColorSchemeResources(R.color.myColor);
        swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                getMessage();
                swipeRefresh.setRefreshing(false);
            }
        });
    }
   ...
}

这段代码还是比较好理解的,首先通过butterknife拿到SwipeRefreshLayout的实例,然后调用setColorSchemeResoutces()方法来设置下拉刷新进度条的颜色,然后调用setOnRefreshListener()方法来设置一个下拉刷新的监听器,当触发了下拉刷新操作时就会回调这个监听器的onRefresh()方法,然后在这里处理具体的刷新逻辑就可以了。最后调用SwipeRefreshLayout的setRefreshing()方法并传入false,用于表示刷新事件结束,并隐藏刷新进度条。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值