Reclerview下拉刷新,上拉加载更多

来源:互联网 发布:冬不拉教程软件 编辑:程序博客网 时间:2024/06/05 19:03
MyCustomeActivity:
1.SwipeRefresh实现下拉刷新

2.添加ItemType为上拉加载更多添加footview,当到达尾部加载更多。

package com.marshalchen.ultimaterecyclerview.demo.aaMyCustome;import android.os.Bundle;import android.os.Handler;import android.support.annotation.Nullable;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.OrientationHelper;import android.support.v7.widget.RecyclerView;import android.util.Log;import android.util.TypedValue;import android.view.View;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;import com.marshalchen.ultimaterecyclerview.demo.R;import java.util.ArrayList;import java.util.List;public class MyCustomeActivity extends AppCompatActivity {    private LinearLayout top_bar_linear_back;    private TextView top_bar_title;    private SwipeRefreshLayout demo_swiperefreshlayout;    private RecyclerView demo_recycler;    private RefreshFootAdapter adapter;    private LinearLayoutManager linearLayoutManager;    private int lastVisibleItem;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_my_custome);        Toast.makeText(getApplicationContext(),"this is a test!",Toast.LENGTH_LONG).show();        demo_swiperefreshlayout = (SwipeRefreshLayout) this.findViewById(R.id.swiperefresh);        demo_recycler = (RecyclerView) this.findViewById(R.id.id_recyclerview);        //设置刷新时动画的颜色,可以设置4个        demo_swiperefreshlayout.setProgressBackgroundColorSchemeResource(android.R.color.white);        demo_swiperefreshlayout.setColorSchemeResources(android.R.color.holo_blue_light,                android.R.color.holo_red_light, android.R.color.holo_orange_light,                android.R.color.holo_green_light);        demo_swiperefreshlayout.setProgressViewOffset(false, 0, (int) TypedValue                .applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources()                        .getDisplayMetrics()));        linearLayoutManager = new LinearLayoutManager(this);        linearLayoutManager.setOrientation(OrientationHelper.VERTICAL);        demo_recycler.setLayoutManager(linearLayoutManager);        //添加分隔线//        demo_recycler.addItemDecoration(new AdvanceDecoration(this, OrientationHelper.VERTICAL));        demo_recycler.setAdapter(adapter = new RefreshFootAdapter(this));        demo_swiperefreshlayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {            @Override            public void onRefresh() {                Log.d("zttjiangqq", "invoke onRefresh...");                new Handler().postDelayed(new Runnable() {                    @Override                    public void run () {                        List<String> newDatas = new ArrayList<String>();                        for (int i = 0; i < 5; i++) {                            int index = i + 1;                            newDatas.add("new item" + index);                        }                        adapter.addItem(newDatas);                        demo_swiperefreshlayout.setRefreshing(false);                        Toast.makeText(MyCustomeActivity.this, "更新了五条数据...", Toast.LENGTH_SHORT).show();                    }                },5000);            }        });        demo_recycler.setOnScrollListener(new RecyclerView.OnScrollListener() {            @Override            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {                super.onScrollStateChanged(recyclerView, newState);                if (newState ==RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 ==adapter.getItemCount()) {                    adapter.changeMoreStatus(RefreshFootAdapter.LOADING_MORE);                    new Handler().postDelayed(new Runnable() {                        @Override                        public void run() {                            List<String> newDatas = new ArrayList<String>();                            for (int i = 0; i< 5; i++) {                                int index = i +1;                                newDatas.add("more item" + index);                            }                            adapter.addMoreItem(newDatas);                            adapter.changeMoreStatus(RefreshFootAdapter.PULLUP_LOAD_MORE);                        }                    }, 2500);                }            }            @Override            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {                super.onScrolled(recyclerView,dx, dy);                lastVisibleItem =linearLayoutManager.findLastVisibleItemPosition();            }        });    }    class CustomOnClickListener implements View.OnClickListener {        @Override        public void onClick (View v){            MyCustomeActivity.this.finish();        }    }}

RefreshFootAdapter:
package com.marshalchen.ultimaterecyclerview.demo.aaMyCustome;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 com.marshalchen.ultimaterecyclerview.demo.R;import java.util.ArrayList;import java.util.List;/** * Created by liuqun on 2017/1/7. */public class RefreshFootAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    //上拉加载更多    public static final int PULLUP_LOAD_MORE = 0;    //正在加载中    public static final int LOADING_MORE = 1;    //上拉加载更多状态-默认为0    private int load_more_status = 0;    private LayoutInflater mInflater;    private List<String> mTitles = null;    private static final int TYPE_ITEM=0;  //普通Item View    private static final int TYPE_FOOTER=1;  //顶部FootView    public RefreshFootAdapter(Context context) {        this.mInflater = LayoutInflater.from(context);        this.mTitles = new ArrayList<String>();        for (int i = 0; i < 20; i++) {            int index = i + 1;            mTitles.add("item" + index);        }    }    /**     * item显示类型     *     * @param parent     * @param viewType     * @return     */    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        //进行判断显示类型,来创建返回不同的View        if (viewType == TYPE_ITEM) {            View view = mInflater.inflate(R.layout.item_recycler_layout, parent, false);            //这边可以做一些属性设置,甚至事件监听绑定            //view.setBackgroundColor(Color.RED);            ItemViewHolder itemViewHolder = new ItemViewHolder(view);            return itemViewHolder;        } else if (viewType == TYPE_FOOTER) {            View foot_view = mInflater.inflate(R.layout.recycler_load_more_layout, parent, false);            //这边可以做一些属性设置,甚至事件监听绑定            //view.setBackgroundColor(Color.RED);            FootViewHolder footViewHolder = new FootViewHolder(foot_view);            return footViewHolder;        }        return null;    }    /**     * 数据的绑定显示     *     * @param holder     * @param position     */    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {        if (holder instanceof ItemViewHolder) {            ((ItemViewHolder) holder).item_tv.setText(mTitles.get(position));            holder.itemView.setTag(position);        } else if (holder instanceof FootViewHolder) {            FootViewHolder footViewHolder = (FootViewHolder) holder;            switch (load_more_status) {                case PULLUP_LOAD_MORE:                    footViewHolder.foot_view_item_tv.setText("上拉加载更多...");                    break;                case LOADING_MORE:                    footViewHolder.foot_view_item_tv.setText("正在加载更多数据...");                    break;            }        }    }    /**     * 进行判断是普通Item视图还是FootView视图     *     * @param position     * @return     */    @Override    public int getItemViewType(int position) {        // 最后一个item设置为footerView        if (position + 1 == getItemCount()) {            return TYPE_FOOTER;        } else {            return TYPE_ITEM;        }    }    @Override    public int getItemCount() {        return mTitles.size() + 1;    }    //自定义的ViewHolder,持有每个Item的的所有界面元素    public static class ItemViewHolder extends RecyclerView.ViewHolder {        public TextView item_tv;        public ItemViewHolder(View view) {            super(view);            item_tv = (TextView) view.findViewById(R.id.item_tv);        }    }    /**     * 底部FootView布局     */    public static class FootViewHolder extends RecyclerView.ViewHolder {        private TextView foot_view_item_tv;        public FootViewHolder(View view) {            super(view);            foot_view_item_tv = (TextView) view.findViewById(R.id.foot_view_item_tv);        }    }    //添加数据    public void addItem(List<String> newDatas) {        //mTitles.add(position, data);        //notifyItemInserted(position);        newDatas.addAll(mTitles);        mTitles.removeAll(mTitles);        mTitles.addAll(newDatas);        notifyDataSetChanged();    }    public void addMoreItem(List<String> newDatas) {        mTitles.addAll(newDatas);        notifyDataSetChanged();    }    /**     * //上拉加载更多     * PULLUP_LOAD_MORE=0;     * //正在加载中     * LOADING_MORE=1;     * //加载完成已经没有更多数据了     * NO_MORE_DATA=2;     *     * @param status     */    public void changeMoreStatus(int status) {        load_more_status = status;        notifyDataSetChanged();    }}

item_recycler_layout:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:background="@android:color/holo_green_light"    >    <TextView        android:gravity="center"        android:id="@+id/item_tv"        android:textColor="@android:color/white"        android:padding="5dp"        android:textSize="16sp"        android:text="Text数据显示..."        android:layout_width="match_parent"        android:layout_height="60dp"        /></LinearLayout>
recycler_load_more_layout:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="45dp"    >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="45dp"        android:orientation="horizontal"        android:gravity="center">        <ProgressBar            android:layout_width="25dp"            android:layout_height="25dp"            />        <TextView            android:id="@+id/foot_view_item_tv"            android:layout_marginLeft="4dp"            android:text="上拉加载更多..."            android:layout_width="wrap_content"            android:layout_height="wrap_content" />    </LinearLayout></LinearLayout>



0 0
原创粉丝点击