Google下拉刷新组件---SwipeRefreshLayout(一)

来源:互联网 发布:绝对争锋网络剧百度云 编辑:程序博客网 时间:2024/05/17 04:56

前言

Android下拉刷新、上拉加载是一个常见的功能,但是Google推出了一个下拉刷新的官方控件—SwipeRefreshLayout之后,就没有了音信,对于使用者确实是个烦恼。
今天我给大家讲解一下使用SwipeRefreshLayout完成下拉刷新,及简单实现上拉加载功能,如果后续有时间,可能会重写一下这个控件。

使用SwipeRefreshLayout实现下拉刷新

首先在布局中加入SwipeRefreshLayout(布局下只能加一个控件):

<android.support.v4.widget.SwipeRefreshLayout        android:id="@+id/srl"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        >        <ListView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:id="@+id/listView"            android:listSelector="@android:color/transparent"            android:scrollbars="none"            />    </android.support.v4.widget.SwipeRefreshLayout>

SwipeRefreshLayout里边可以放ListView、GridView、ScrollView、TextView等等控件。
Activity中添加下拉刷新的监听方法:

srl = (SwipeRefreshLayout) findViewById(R.id.srl);        srl.setColorSchemeColors(Color.RED, Color.BLUE, Color.YELLOW);        srl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener()        {            @Override            public void onRefresh()            {                new Handler().postDelayed(new Runnable()                {                    @Override                    public void run()                    {                        data.add("aaa");                        mAdapter.notifyDataSetChanged();                        srl.setRefreshing(false);                    }                }, 1000);            }        });

setColorSchemeColors可以设置等待条的颜色,在onRefresh中实现你的刷新操作,别忘了setRefreshing(false)结束刷新操作。

简单实现上拉加载

简单实现:在lisview最下面一个item呈现在用户面前的时候,自动加载下一页。
首先为listView添加滚动监听list.setOnScrollListener(),主要是修改onScroll方法。这里在上拉操作的时候我们可以分为这几种情况:
(一)数据未填充满整个屏幕
1.数据不够一页,这种情况,listview当让不用上拉加载了,因为第一页数据都没满。
2.数据够一页,但是convertView高度不够填充屏幕,这个时候,我们可以继续加载下一页。
(二)数据填充满了整个屏幕
1.未滚动到最下面一个item,那么正常滚动。
2.已滚动到最下面一个item,那么加载下一页。

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)            {                Log.i("aaa", "firstVisibleItem=" + firstVisibleItem + " visibleItemCount=" + visibleItemCount + " totalItemCount=" + totalItemCount);                if(isLoading)                {                    return ;                }                // 假设一页10条数据   这里不够一页的数据                if (totalItemCount < 10*page)                {                    return;                }                // 最下面item未出现,正常滚动                if (totalItemCount < visibleItemCount)                {                    return;                }                // 当最下面一个item出现的时候,加载下一页                if (firstVisibleItem + visibleItemCount >= totalItemCount)                {                    isLoading = true;                    Toast.makeText(MainActivity.this, "加载更多", Toast.LENGTH_SHORT).show();                    new Handler().postDelayed(new Runnable()                    {                        @Override                        public void run()                        {                            data.add("bbb");                            data.add("ccc");                            data.add("ddd");                            mAdapter.notifyDataSetChanged();                            isLoading = false;                        }                    }, 2000);                }            }

这里需要注意的是,最后一个item出现的时候,是自动加载,此时onScroll还一直在被调用,我在加载下一页的时候,肯定不想重复加载,所以用isLoading变量来记录是否在加载中。
本人技术比较渣,有问题欢迎指正,以后有时间,可能会修改SwipeRefreshLayout源代码。

0 0
原创粉丝点击