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

前言

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值