android:ListView下拉刷新上拉加载(SwipeRefreshLayout+滑动监听加载更多)


这次使用的是系统的SwipeRefreshLayout实现下拉刷新,和设置ListView的滑动监听判断是否滑动到最底部然后加载更多;

这个要比PullToRefreshListView简单很多,想PullToRefreshListView实现下拉刷新上拉加载的可以看这篇博客:

http://blog.csdn.net/zheng_jiao/article/details/51425244

至于使用哪一种大家可以根据产品的需求选择,这两种刷新目前为止世面上还是使用PullToRefreshListView的比较多;


首先说下SwipeRefreshLayout的五个方法:

1、setOnRefreshListener():设置手势滑动监听器。
2、setProgressBackgroundColor():设置进度圈的背景色。
3、setColorSchemeResources():设置进度动画的颜色。
4、setRefreshing():设置组件的刷洗状态。
5、setSize():设置进度圈的大小

这个大家简单了解一下,下面代码中都一一用到;


首先说下布局文件,如果想用SwipeRefreshLayout实现下拉刷新必须把ListView写到SwipeRefreshLayout布局里面;

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/srfl">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listview" />
</android.support.v4.widget.SwipeRefreshLayout>


我这边是自己写的小Demo所以下拉的时候直接发送一个延时1秒的handler,然后添加数据刷新adapter;

上拉加载更多的时候直接给ListVIew设置了一个滑动监听,判断是否滑动到adapter的最下面,然后加载数据,刷新adapter;

public class MainActivity extends Activity {
    private ListView mListView;
    private SwipeRefreshLayout swipeRefreshLayout;
    private List<String> stringList=new ArrayList<>();
    private ArrayAdapter<String> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        for (int x=0 ; x<16;x++){
            stringList.add("新浪微博:搏击爱好者Z"+"---"+x);
        }
        initView();
    }

    private void initView() {
        swipeRefreshLayout= (SwipeRefreshLayout) findViewById(R.id.srfl);
        //设置进度圈的大小;(这里面只有两个值SwipeRefreshLayout.LARGE和DEFAULT,后者是默认效果)
        swipeRefreshLayout.setSize(SwipeRefreshLayout.LARGE);
        //设置进度圈的背景色。这里随便给他设置了一个颜色:浅绿色
        swipeRefreshLayout.setProgressBackgroundColorSchemeColor(Color.CYAN);
        //设置进度动画的颜色。这里面最多可以指定四个颜色,我这也是随机设置的,大家知道怎么用就可以了
        swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_orange_dark
                ,android.R.color.holo_blue_dark
                ,android.R.color.holo_red_dark
                ,android.R.color.widget_edittext_dark);
        mListView= (ListView) findViewById(R.id.listview);
        adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, stringList);
        mListView.setAdapter(adapter);

        //设置手势滑动监听器
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            public void onRefresh() {
                //发送一个延时1秒的handler信息
                handler.sendEmptyMessageDelayed(199,1000);
            }
        });

        //给listview设置一个滑动的监听
        mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
            //当滑动状态发生改变的时候执行
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                switch (scrollState){
                    //当不滚动的时候
                    case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:

                        //判断是否是最底部
                        if(view.getLastVisiblePosition()==(view.getCount())-1){
                            for(int x=0;x<5;x++){
                                stringList.add(stringList.size(),"魔兽世界"+x);
                            }
                            adapter.notifyDataSetChanged();
                        }
                        break;
                }
            }
            //正在滑动的时候执行
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            }
        });
    }

    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if(msg.what==199){
                stringList.add(0,"英雄联盟");
                adapter.notifyDataSetChanged();
                //设置组件的刷洗状态;false代表关闭
                swipeRefreshLayout.setRefreshing(false);
            }
        }
    };
}

这里面为了给大家演示SwipeRefreshLayout的几个方法,如果全部使用默认可以把setProgressBackgroundColor():setColorSchemeResources():setSize():这三个方法去掉。

这样代码会更少,默认效果也非常不错,这个看大家需求。

源码下载地址

你可能感兴趣的:(ListView下拉加载更多,ListView上拉刷新)