SwipeRefreshLayout实现下拉刷新

这个控件在supportV4就提供了,叫做SwipeRefreshLayout。这个view其实就是一个父控件,我们可以如下定义。

在这强调一点这是5.0以下可能会出现问题

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

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

有没有感觉它和listview一毛钱关系都没有!就是这么方便,比之前的listview下拉刷新要简单多了。用户只要在这个控件的范围里下拉,就会自动出现下拉的圆形小球。在实际使用中,我们还是需要在java代码中进行简单处理的。

而且你还可以用来刷新一些其他东西

首先设置一些属性

   mSwipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
        mSwipeLayout.setOnRefreshListener(this);
        // 设置下拉圆圈上的颜色,蓝色、绿色、橙色、红色
        mSwipeLayout.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);
        mSwipeLayout.setDistanceToTriggerSync(400);// 设置手指在屏幕下拉多少距离会触发下拉刷新
        mSwipeLayout.setProgressBackgroundColor(R.color.red);
        mSwipeLayout.setSize(SwipeRefreshLayout.LARGE);

下面是刷新成功的监听

  /*
     * 监听器SwipeRefreshLayout.OnRefreshListener中的方法,当下拉刷新后触发
     */
    public void onRefresh() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                list.removeAll(list);
                list.add("weibo: googdev");
                list.add("My GitHub: stormzhang");
                list.add("Love Open Source");
                list.add("An Android Developer");
                list.add("This is stormzhang");
                list.add("Hello");

                arrayAdapter.notifyDataSetChanged();
                // 停止刷新
                mSwipeLayout.setRefreshing(false);
            }
        }, 5000); // 5秒后发送消息,停止刷新
    }

下面贴出全部

package com.example.admin.xiala5;

import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity  implements SwipeRefreshLayout.OnRefreshListener{
    private SwipeRefreshLayout mSwipeLayout;
    private ListView mListView;
    private ArrayList<String> list = new ArrayList<String>();
    ArrayAdapter arrayAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mListView = (ListView) findViewById(R.id.listview);
        arrayAdapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getData());
        mListView.setAdapter(arrayAdapter);

        mSwipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
        mSwipeLayout.setOnRefreshListener(this);
        // 设置下拉圆圈上的颜色,蓝色、绿色、橙色、红色
        mSwipeLayout.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);
        mSwipeLayout.setDistanceToTriggerSync(400);// 设置手指在屏幕下拉多少距离会触发下拉刷新
        mSwipeLayout.setProgressBackgroundColor(R.color.red);
        mSwipeLayout.setSize(SwipeRefreshLayout.LARGE);
    }
    private ArrayList<String> getData() {
        list.add("Hello");
        list.add("This is stormzhang");
        list.add("An Android Developer");
        list.add("Love Open Source");
        list.add("My GitHub: stormzhang");
        list.add("weibo: googdev");
        return list;
    }

    /*
     * 监听器SwipeRefreshLayout.OnRefreshListener中的方法,当下拉刷新后触发
     */
    public void onRefresh() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                list.removeAll(list);
                list.add("weibo: googdev");
                list.add("My GitHub: stormzhang");
                list.add("Love Open Source");
                list.add("An Android Developer");
                list.add("This is stormzhang");
                list.add("Hello");

                arrayAdapter.notifyDataSetChanged();
                // 停止刷新
                mSwipeLayout.setRefreshing(false);
            }
        }, 5000); // 5秒后发送消息,停止刷新
    }
}

上面只有刷新,那么加载呢,这里加载我们可以另写与这个关系不大了,但是好事成双我就写下吧。

直接贴代码了哈
package com.example.admin.xiala5;

import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

import static com.example.admin.xiala5.R.id.listview;

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener{
private SwipeRefreshLayout mSwipeLayout;
private ListView mListView;
private ArrayList list = new ArrayList();
ArrayAdapter arrayAdapter;

RelativeLayout id_rl_loading;
ProgressBar id_pull_to_refresh_load_progress;
TextView id_pull_to_refresh_loadmore_text;
boolean isLastItem = false;//是否是最后一项
boolean isLoading = false;//是否正在加载中
boolean isComp = false;//标记一次是否加载完成


int temp_data_count_page = 0;//临时存放当前加载页对应的pos
int data_count_page_all = 2;//模拟一共3页数据


final String loading_Load_More = "加载中...";
final String comp_Load_More = "加载完成";

String nowNormalText = "";//存放当前footview显示的文字
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mListView = (ListView) findViewById(listview);
    arrayAdapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getData());
    mListView.setAdapter(arrayAdapter);
    mListView.setOnScrollListener(OnScrollListenerOne);

    mSwipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
    mSwipeLayout.setOnRefreshListener(this);
    // 设置下拉圆圈上的颜色,蓝色、绿色、橙色、红色
    mSwipeLayout.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);
    mSwipeLayout.setDistanceToTriggerSync(400);// 设置手指在屏幕下拉多少距离会触发下拉刷新
    mSwipeLayout.setProgressBackgroundColor(R.color.red);
    mSwipeLayout.setSize(SwipeRefreshLayout.LARGE);

    //底部设置
    View listview_footer_view = LayoutInflater.from(this).inflate(R.layout.listview_footer, null);
    id_rl_loading = (RelativeLayout) listview_footer_view.findViewById(R.id.id_rl_loading);
    id_pull_to_refresh_load_progress = (ProgressBar) listview_footer_view.findViewById(R.id.id_pull_to_refresh_load_progress);
    id_pull_to_refresh_load_progress.setVisibility(View.GONE);
    id_pull_to_refresh_loadmore_text = (TextView) listview_footer_view.findViewById(R.id.id_pull_to_refresh_loadmore_text);
    id_pull_to_refresh_loadmore_text.setClickable(false);
    mListView.addFooterView(listview_footer_view);
}
private ArrayList<String> getData() {
    list.add("Hello");
    list.add("This is stormzhang");
    list.add("An Android Developer");
    list.add("Love Open Source");
    list.add("My GitHub: stormzhang");
    list.add("weibo: googdev");
    return list;
}

/*
 * 监听器SwipeRefreshLayout.OnRefreshListener中的方法,当下拉刷新后触发
 */
public void onRefresh() {
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            list.removeAll(list);
            list.add("Hello");
            list.add("This is stormzhang");
            list.add("An Android Developer");
            list.add("Love Open Source");
            list.add("My GitHub: stormzhang");
            list.add("weibo: googdev");
            temp_data_count_page=0;
            mListView.setAdapter(arrayAdapter);
            // 停止刷新
            mSwipeLayout.setRefreshing(false);
        }
    }, 5000); // 5秒后发送消息,停止刷新
}

/**
 * 上拉加载1
 */
AbsListView.OnScrollListener OnScrollListenerOne = new AbsListView.OnScrollListener() {

    //正在滚动时回调,回调2-3次,手指没抛则回调2次。scrollState = 2的这次不回调
    //回调顺序如下
    //第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1) 正在滚动
    //第2次:scrollState = SCROLL_STATE_FLING(2) 手指做了抛的动作(手指离开屏幕前,用力滑了一下)
    //第3次:scrollState = SCROLL_STATE_IDLE(0) 停止滚动
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        //当滚到最后一行且停止滚动时,执行加载
        if (isLastItem && scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE && !isLoading) {
            //加载元素
            loadMore();
            isLastItem = false;
        }
    }

    //滚动时一直回调,直到停止滚动时才停止回调。单击时回调一次。
    //firstVisibleItem:当前能看见的第一个列表项ID(从0开始)
    //visibleItemCount:当前能看见的列表项个数(小半个也算)
    //totalItemCount:列表项共数
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        //判断是否滚到最后一行
        if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0) {
            isLastItem = true;
        }
    }
};


//加载逻辑
private void loadMore() {
    id_rl_loading.setVisibility(View.VISIBLE);
    id_pull_to_refresh_loadmore_text.setText(loading_Load_More);
    id_pull_to_refresh_loadmore_text.setClickable(false);
    id_pull_to_refresh_load_progress.setVisibility(View.VISIBLE);
    isLoading = true;
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            loadData();
        }
    }, 3 * 1000);


}
//模拟加载数据
private void loadData() {
    isLoading = false;
    Log.i("XXX", "loadData");

    if (temp_data_count_page < data_count_page_all) {//模拟加载完成了

        for (int i = 0; i < 15; i++) {
            list.add("More" + i);
        }

        temp_data_count_page++;
        id_pull_to_refresh_loadmore_text.setText(nowNormalText);
        isComp = false;
        id_pull_to_refresh_loadmore_text.setClickable(true);
    } else {
        isComp = true;
        id_pull_to_refresh_loadmore_text.setClickable(false);
        id_pull_to_refresh_loadmore_text.setText(comp_Load_More);
        Toast.makeText(MainActivity.this,"没有数据",Toast.LENGTH_SHORT).show();
    }
    id_pull_to_refresh_load_progress.setVisibility(View.GONE);

    arrayAdapter.notifyDataSetChanged();
}

}

这里先这样。。。有空我把他封装成listview

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值