Swiperefreshlayout与Recyclerview下拉刷新和上拉加载

来源:互联网 发布:都市星际淘宝交易商 编辑:程序博客网 时间:2024/05/16 02:25

布局文件

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main2"    android:layout_width="match_parent"    android:layout_height="match_parent"    >    <android.support.v4.widget.SwipeRefreshLayout        android:id="@+id/SwipeRefreshLayout"        android:layout_width="match_parent"        android:layout_height="match_parent">        <android.support.v7.widget.RecyclerView            android:id="@+id/recyclerView"            android:layout_width="match_parent"            android:layout_height="match_parent">        </android.support.v7.widget.RecyclerView>    </android.support.v4.widget.SwipeRefreshLayout></RelativeLayout>
MainActivity代码

package com.example.putorefresh;import android.os.Handler;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.util.Log;import android.view.View;import android.widget.Toast;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class Main2Activity extends AppCompatActivity {    boolean isLoading;    private List<Map<String, Object>> data = new ArrayList<>();    private MyAdapter adapter = new MyAdapter(this, data);    private Handler handler = new Handler();    private SwipeRefreshLayout swipeRefreshLayout;    private RecyclerView recyclerView;    private int index;    private int lastVisibleItemPosition;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main2);        initView();        initData();    }    private void initView() {        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.SwipeRefreshLayout);        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
//这里设置刷新控件的样式颜色
swipeRefreshLayout.setColorSchemeResources(R.color.blueStatus);
//设置第一次进入界面显示刷新控件        swipeRefreshLayout.post(new Runnable() {            @Override            public void run() {                swipeRefreshLayout.setRefreshing(true);            }        });//设置下拉刷新监听         swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {            @Override            public void onRefresh() {
//模拟请求网络                handler.postDelayed(new Runnable() {                    @Override                    public void run() {                        data.clear();                        index=0;                        getData();                    }                }, 2000);            }        });        final LinearLayoutManager layoutManager = new LinearLayoutManager(this);        recyclerView.setLayoutManager(layoutManager);        recyclerView.setAdapter(adapter);
//设置滑动监听        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
//滑动状态监听            @Override            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {                super.onScrollStateChanged(recyclerView, newState);                Log.d("test", "StateChanged = " + newState);                if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItemPosition + 1 == adapter.getItemCount()) {                    Log.d("test", "loading executed");                    boolean isRefreshing = swipeRefreshLayout.isRefreshing();                    if (isRefreshing) {                        adapter.notifyItemRemoved(adapter.getItemCount());                        return;                    }                    if (!isLoading) {                        isLoading = true;                        handler.postDelayed(new Runnable() {                            @Override                            public void run() {                                isLoading = false;                                getData();                                Log.d("test", "load more completed");                            }                        }, 1000);                    }else{                        adapter.notifyItemRemoved(adapter.getItemCount());                        return;                    }                }            }//滑动监听            @Override            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {                super.onScrolled(recyclerView, dx, dy);                Log.d("test", "onScrolled");//最后可见的item的位置(0,1....adapter.getCount()-1)                lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();                /*if (lastVisibleItemPosition + 1 == adapter.getItemCount()) {                    Log.d("test", "loading executed");                    boolean isRefreshing = swipeRefreshLayout.isRefreshing();                    if (isRefreshing) {                        adapter.notifyItemRemoved(adapter.getItemCount());                        return;                    }                    if (!isLoading) {                        isLoading = true;                        handler.postDelayed(new Runnable() {                            @Override                            public void run() {                                getData();                                Log.d("test", "load more completed");                                isLoading = false;                            }                        }, 1000);                    }                }*/            }        });        //添加点击事件        adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {            @Override            public void onItemClick(View view, int position) {                Log.d("test", "item position = " + position);            }            @Override            public void onItemLongClick(View view, int position) {            }        });    }    public void initData() {        handler.postDelayed(new Runnable() {            @Override            public void run() {                getData();            }        }, 1500);    }    /**     * 获取测试数据     */    private void getData() {        index++;        if(index>3){            Toast.makeText(Main2Activity.this,"没有更多数据!",Toast.LENGTH_SHORT).show();//            adapter.notifyDataSetChanged();//            recyclerView.smoothScrollToPosition(adapter.getItemCount());            swipeRefreshLayout.setRefreshing(false);            adapter.notifyItemRemoved(adapter.getItemCount());            isLoading = true;            return;        }else{            for (int i = 0; i < 6; i++) {                Map<String, Object> map = new HashMap<>();                data.add(map);            }        }        adapter.notifyDataSetChanged();        swipeRefreshLayout.setRefreshing(false);        adapter.notifyItemRemoved(adapter.getItemCount());    }}

Adapter代码

package com.example.putorefresh;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 Dell on 2017/2/8. */public class MyAdapter  extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    private static final int TYPE_ITEM = 0;    private static final int TYPE_FOOTER = 1;    private Context context;    private List data;    public interface OnItemClickListener {        void onItemClick(View view, int position);        void onItemLongClick(View view, int position);    }    private OnItemClickListener onItemClickListener;    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {        this.onItemClickListener = onItemClickListener;    }    @Override    public int getItemCount() {        return data.size() == 0 ? 0 : data.size() + 1;    }    @Override    public int getItemViewType(int position) {        if (position + 1 == getItemCount()) {            return TYPE_FOOTER;        } else {            return TYPE_ITEM;        }    }    public MyAdapter(Context context, List data) {        this.context = context;        this.data = data;    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        if (viewType == TYPE_ITEM) {            View view = LayoutInflater.from(context).inflate(R.layout.item_notice, parent,                    false);            return new ItemViewHolder(view);        } else if (viewType == TYPE_FOOTER) {            View view = LayoutInflater.from(context).inflate(R.layout.item_foot, parent,                    false);            return new FootViewHolder(view);        }        return null;    }    @Override    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {        if (holder instanceof ItemViewHolder) {            //holder.tv.setText(data.get(position));            if (onItemClickListener != null) {                holder.itemView.setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        int position = holder.getLayoutPosition();                        onItemClickListener.onItemClick(holder.itemView, position);                    }                });                holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {                    @Override                    public boolean onLongClick(View v) {                        int position = holder.getLayoutPosition();                        onItemClickListener.onItemLongClick(holder.itemView, position);                        return false;                    }                });            }        }    }    static class ItemViewHolder extends RecyclerView.ViewHolder {        TextView tv;        public ItemViewHolder(View view) {            super(view);            tv = (TextView) view.findViewById(R.id.tv_date);        }    }    static class FootViewHolder extends RecyclerView.ViewHolder {        public FootViewHolder(View view) {            super(view);        }    }}
脚布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="40dp"    android:gravity="center"    android:orientation="horizontal"    >    <ProgressBar        android:layout_marginRight="6dp"        android:id="@+id/progressBar"        style="?android:attr/progressBarStyleSmall"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center" />    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:text="加载中" /></LinearLayout>





0 0