基于SwipeRefreshLayout的下拉刷新功能

来源:互联网 发布:未备案域名 微信 编辑:程序博客网 时间:2024/05/10 14:24

前言

下拉刷新已经成了每个app的标配,Google在API 19后开始自带下拉刷新的功能组件,名字叫SwipeRefreshLayout。使用这个组件,可以先阅读下DOC: SwipeRefreshLayout 。以前我们做下拉刷新都是选择用第三方的,比较好用的有如下几个:
第三方也有很多好用的开源组件。例如 SuperSwipeRefreshLayout,Android-PullToRefresh,android-Ultra-Pull-To-Refresh等。

步骤

setOnRefreshListener(OnRefreshListener): 设置刷新监听器
setRefreshing(boolean): 显示或隐藏刷新进度条
isRefreshing(): 检查是否处于刷新状态
setColorScheme(): 设置进度条的颜色,最多能设置四种

编写布局文件

在布局文件中增加下面的代码,请注意组件的命名空间

<!--下拉刷新-->    <android.support.v4.widget.SwipeRefreshLayout        android:id="@+id/swipe_layout"        android:layout_below="@+id/roll_view_pager"        android:layout_width="match_parent"        android:layout_height="wrap_content">        <!--刷新列表-->        <ListView            android:id="@+id/lvPlayers"            android:layout_width="match_parent"            android:layout_height="wrap_content">        </ListView>    </android.support.v4.widget.SwipeRefreshLayout>

java代码

请注意看里面的注释。Activity里面的实现了SwipeRefreshLayout.OnRefreshListener接口,因此需要重写onRefresh回调事件。

package bingo.pushtorefresh;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.app.AppCompatActivity;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {    private SwipeRefreshLayout layout;    private ListView lvPlayers;    private List<String> listData=new ArrayList<>();    private ArrayAdapter<String> adapter;    private static final int REFRESH_COMPLETE=0x110;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        setTitle("下拉刷新");        //设置数据源        setData();        //初始化ListView        lvPlayers=(ListView)findViewById(R.id.lvPlayers);        layout=(SwipeRefreshLayout)findViewById(R.id.swipe_layout);        //设置监听器        layout.setOnRefreshListener(this);        //设置颜色,最多4种颜色        layout.setColorSchemeResources(                android.R.color.holo_blue_bright,                android.R.color.holo_green_light,                android.R.color.holo_orange_light,                android.R.color.holo_red_light);        //设置列表适配器        adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listData);        lvPlayers.setAdapter(adapter);    }    //模拟数据    private void setData(){        listData.add("姚泽鑫");        listData.add("冯佰诚");        listData.add("冯广标");    }    //刷新回调事件    @Override    public void onRefresh() {        Toast.makeText(this, "下拉刷新", Toast.LENGTH_SHORT).show();        handler.sendEmptyMessageDelayed(REFRESH_COMPLETE,3000);    }    //用于更新UI    Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            switch (msg.what){                case REFRESH_COMPLETE:                    listData.add("张三丰");                    listData.add("谢霆锋");                    //更新列表                    adapter.notifyDataSetChanged();                    //显示或者隐藏刷新进度条                    layout.setRefreshing(false);                    break;            }            super.handleMessage(msg);        }    };}

效果

下拉刷新效果

1 0