使用XRefreshView实现下拉刷新下拉加载

来源:互联网 发布:漫画控连接不了网络 编辑:程序博客网 时间:2024/06/07 22:01

github上的地址:https://github.com/huxq17/XRefreshView;

简单的实现了下ListView,RecyclerView的上拉下拉:



首先依赖一下XRefresh的库:

上代码:

activity_main:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.zhihui.xrefreshview.MainActivity">   <Button       android:layout_width="match_parent"       android:layout_height="48dp"       android:text="listViewActivity"       android:textAllCaps="false"       android:onClick="listViewActivity"/>   <Button       android:layout_width="match_parent"       android:layout_height="48dp"       android:text="RecyclerViewActivity"       android:textAllCaps="false"       android:onClick="recyclerViewActivity"/></LinearLayout>

MainActivity:

package com.zhihui.xrefreshview;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void listViewActivity(View view){        startActivity(new Intent(MainActivity.this,ListViewActivity.class));    }    public void recyclerViewActivity(View view){        startActivity(new Intent(MainActivity.this,LinearRecyclerViewActivity.class));    }}

activity_list_view布局:

<com.andview.refreshview.XRefreshView xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:xrefreshview="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/custom_view"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#fff"    android:orientation="vertical"    xrefreshview:isHeightMatchParent="true"    xrefreshview:isWidthMatchParent="true" >    <ListView        android:id="@+id/lv"        android:layout_width="match_parent"        android:layout_height="wrap_content" /></com.andview.refreshview.XRefreshView>

package com.zhihui.xrefreshview;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.widget.AbsListView;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;import com.andview.refreshview.XRefreshView;import com.andview.refreshview.utils.LogUtils;import java.util.ArrayList;import java.util.List;public class ListViewActivity extends AppCompatActivity {    private ListView lv;    private List<String> str_name = new ArrayList<String>();    private XRefreshView refreshView;    private ArrayAdapter<String> adapter;    public static long lastRefreshTime;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_list_view);        for (int i = 0; i <14; i++) {            str_name.add("数据" + i);        }        lv = (ListView) findViewById(R.id.lv);        refreshView = (XRefreshView) findViewById(R.id.custom_view);        adapter = new ArrayAdapter<String>(this,                android.R.layout.simple_list_item_1, str_name);        lv.setAdapter(adapter);        // 设置是否可以下拉刷新        refreshView.setPullRefreshEnable(true);        // 设置是否可以上拉加载        refreshView.setPullLoadEnable(true);        // 设置上次刷新的时间        refreshView.restoreLastRefreshTime(lastRefreshTime);        //当下拉刷新被禁用时,调用这个方法并传入false可以不让头部被下拉        refreshView.setMoveHeadWhenDisablePullRefresh(true);        // 设置时候可以自动刷新        refreshView.setAutoRefresh(false);//refreshView.setOnBottomLoadMoreTime(new OnBottomLoadMoreTime() {//@Override//public boolean isBottom() {//return false;//}//});        refreshView.setXRefreshViewListener(new XRefreshView.SimpleXRefreshListener() {            @Override            public void onRefresh(boolean isPullDown) {                new Handler().postDelayed(new Runnable() {                    @Override                    public void run() {                        refreshView.stopRefresh();                        lastRefreshTime = refreshView.getLastRefreshTime();                    }                }, 2000);            }            @Override            public void onLoadMore(boolean isSilence) {                new Handler().postDelayed(new Runnable() {                    @Override                    public void run() {                        refreshView.stopLoadMore();                    }                }, 2000);            }            @Override            public void onRelease(float direction) {                super.onRelease(direction);                if (direction > 0) {                    toast("下拉");                } else {                    toast("上拉");                }            }        });        refreshView.setOnAbsListViewScrollListener(new AbsListView.OnScrollListener() {            @Override            public void onScrollStateChanged(AbsListView view, int scrollState) {                LogUtils.i("onScrollStateChanged");            }            @Override            public void onScroll(AbsListView view, int firstVisibleItem,                                 int visibleItemCount, int totalItemCount) {                LogUtils.i("onScroll");            }        });    }    public void toast(String msg) {        Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();    }}


activity_linear_recycler_view布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent">    <com.andview.refreshview.XRefreshView        android:id="@+id/xrefreshview"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:background="#fff">        <android.support.v7.widget.RecyclerView            android:id="@+id/recycler_view_test_rv"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:layout_margin="2dp"            android:background="#bbccaa"            android:scrollbars="vertical" />    </com.andview.refreshview.XRefreshView></RelativeLayout>


package com.zhihui.xrefreshview;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import com.andview.refreshview.XRefreshView;import java.util.ArrayList;import java.util.List;import butterknife.Bind;import butterknife.ButterKnife;public class LinearRecyclerViewActivity extends AppCompatActivity {    @Bind(R.id.recycler_view_test_rv)    RecyclerView recyclerView;    @Bind(R.id.xrefreshview)    XRefreshView xRefreshView;    private List<String> listData;    private MyAdapter adapter;    LinearLayoutManager layoutManager;    private int mLoadCount = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_linear_recycler_view);        ButterKnife.bind(this);        recyclerView.setHasFixedSize(true);        initData();        adapter=new MyAdapter(this,listData);        layoutManager = new LinearLayoutManager(this);        recyclerView.setLayoutManager(layoutManager);        // 静默加载模式不能设置footerview        recyclerView.setAdapter(adapter);        //设置刷新完成以后,headerview固定的时间        xRefreshView.setPinnedTime(1000);//        xRefreshView.setMoveForHorizontal(true);        xRefreshView.setPullLoadEnable(true);        xRefreshView.setAutoLoadMore(false);//        adapter.setCustomLoadMoreView(new XRefreshViewFooter(this));        xRefreshView.enableReleaseToLoadMore(true);        xRefreshView.enableRecyclerViewPullUp(true);        xRefreshView.enablePullUpWhenLoadCompleted(true);        xRefreshView.setXRefreshViewListener(new XRefreshView.SimpleXRefreshListener() {            @Override            public void onRefresh(boolean isPullDown) {                new Handler().postDelayed(new Runnable() {                    @Override                    public void run() {                        xRefreshView.stopRefresh();                    }                }, 500);            }            @Override            public void onLoadMore(boolean isSilence) {                new Handler().postDelayed(new Runnable() {                    public void run() {                        mLoadCount++;                        if (mLoadCount >= 3) {//模拟没有更多数据的情况                            xRefreshView.setLoadComplete(true);                        } else {                            // 刷新完成必须调用此方法停止加载                            xRefreshView.stopLoadMore(false);                            //当数据加载失败 不需要隐藏footerview时,可以调用以下方法,传入false,不传默认为true                        }                    }                }, 1000);            }        });    }    private void initData() {        listData = new ArrayList<>();        for (int i = 0; i < 15; i++) {            listData.add("我是第" + i + "个item");        }    }}


recycler_view布局:

<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:layout_width="match_parent"    android:layout_height="100dp"    xmlns:card_view="http://schemas.android.com/tools"    android:layout_gravity="center"    android:foreground="?android:attr/selectableItemBackground"    card_view:cardBackgroundColor="@android:color/white"    card_view:cardCornerRadius="8dp"    android:layout_margin="5dp"    android:paddingBottom="5dp"    card_view:cardElevation="4dp">    <LinearLayout        android:id="@+id/recycler_view_test_item_person_view"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical"        android:padding="15dp">        <TextView            android:id="@+id/item_tv"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:textSize="18sp" />    </LinearLayout></android.support.v7.widget.CardView>

package com.zhihui.xrefreshview;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.List;/** * Created by Administrator on 2017/6/16. */public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {    private Context context;    private List<String> datas;    public MyAdapter(Context context, List<String> datas) {        this.context = context;        this.datas = datas;    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View v = LayoutInflater.from(parent.getContext()).inflate(                R.layout.recycler_item, parent, false);        return new MyViewHolder(v);    }    @Override    public void onBindViewHolder(MyViewHolder holder, int position) {        holder.tv.setText(datas.get(position));    }    @Override    public int getItemCount() {        return datas.size();    }    class MyViewHolder extends RecyclerView.ViewHolder {        private final TextView tv;        public MyViewHolder(View itemView) {            super(itemView);            tv = (TextView) itemView.findViewById(R.id.item_tv);        }    }}




阅读全文
0 0
原创粉丝点击