刷新和加载更多

/**

*这个只是本人做的一个简单的刷新加载如果想看更多信息请点击下方链接进入

*http://www.jianshu.com/p/e2e142a07c2a

*/


//首先我们先在build.gradle导入包(本人用的是recyclerview,也可以使用listview或者是gridview)


compile 'com.cjj.materialrefeshlayout:library:1.3.0'
compile 'com.android.support:recyclerview-v7:25.3.0'

//接下来我们就在main.xml中设置

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.bwei.myhome.MainActivity">

    <com.cjj.MaterialRefreshLayout
        android:id="@+id/refresh"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:overlay="true"
        app:wave_show="true"
        app:wave_color="@color/material_green"
        app:wave_height_type="higher">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </android.support.v7.widget.RecyclerView>

    </com.cjj.MaterialRefreshLayout>

</LinearLayout>

//效果图




//接下来就要开始写代码了

private MaterialRefreshLayout refreshLayout;
private RecyclerView rv;
private List<String> list;
private MyAdapter myAdapter;
private boolean isLoadMore = true;
/**
 * 一个承接数据的数组
 */
private List<String> mList = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initView();
    initData();

}

private void initData() {

    list = new ArrayList<>();
    for (int i=0;i<10;i++){
        list.add(""+i);
    }
    rv.setLayoutManager(new LinearLayoutManager(this));
    myAdapter = new MyAdapter(MainActivity.this,list);
    rv.setAdapter(myAdapter);
    refreshLayout.setLoadMore(true);
    refreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() {

        //刷新
        @Override
        public void onRefresh(MaterialRefreshLayout materialRefreshLayout) {

            //一般加载数据都是在子线程中,这里我用到了handler
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, "已经没有更多数据了", Toast.LENGTH_SHORT).show();
                    /**
                     * 刷新完成后调用此方法,要不然刷新效果不消失
                     */
                    refreshLayout.finishRefresh();
                }
            }, 3000);

        }

        //加载更多
        @Override
        public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) {

            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    isLoadMore=false;
                    for (int i = 0; i < 3; i++) {
                        mList.add(i, "new City " + i);
                    }
                    //通知刷新
                    myAdapter.addLists(myAdapter.getLists().size(), mList);
                    //mRecyclerView.scrollToPosition(mAdapter.getLists().size());
                    /**
                     * 完成加载数据后,调用此方法,要不然刷新的效果不会消失
                     */
                    refreshLayout.finishRefreshLoadMore();
                }
            }, 3000);

        }
    });

}

private void initView() {

    refreshLayout = (MaterialRefreshLayout) findViewById(R.id.refresh);
    rv = (RecyclerView) findViewById(R.id.rv);

}

//下面是MyAdapter中的代码


private Context context;
private List<String> list;
public interface OnItemClickLitener
{
    void onItemClick(View view, int position);
    void onItemLongClick(View view , int position);
}

private OnItemClickLitener mOnItemClickLitener;

public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)
{
    this.mOnItemClickLitener = mOnItemClickLitener;
}

public MyAdapter(Context context, List<String> list) {
    this.context = context;
    this.list = list;
}

@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

    MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
            context).inflate(R.layout.item, viewGroup,
            false));

    return holder;
}

@Override
public void onBindViewHolder(final MyAdapter.MyViewHolder holder, int i) {

    holder.tv.setText("item"+list.get(i));

    // 如果设置了回调,则设置点击事件
    if (mOnItemClickLitener != null)
    {
        holder.itemView.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                int pos = holder.getLayoutPosition();
                mOnItemClickLitener.onItemClick(holder.itemView, pos);
            }
        });

        holder.itemView.setOnLongClickListener(new View.OnLongClickListener()
        {
            @Override
            public boolean onLongClick(View v)
            {
                int pos = holder.getLayoutPosition();
                mOnItemClickLitener.onItemLongClick(holder.itemView, pos);
                return false;
            }
        });
    }

}

@Override
public int getItemCount() {
    return list.size();
}

class MyViewHolder extends RecyclerView.ViewHolder
{

    private TextView tv;

    public MyViewHolder(View view)
    {
        super(view);
        tv = (TextView) view.findViewById(R.id.tv);
    }
}

/**
 * 对以下方法的复用
 * @param lists
 */
public void addLists(List<String> lists) {
    addLists(0, lists);
}


/**
 * 添加数据
 * @param position  添加的位置
 * @param lists   添加的数据
 */
public void addLists(int position, List<String> lists) {
    //mLists = lists;
    if (lists != null && lists.size() > 0) {
        list.addAll(lists);
        /**
         * Notify any registered observers that the <code>itemCount</code> items starting at
         * position <code>positionStart</code> have changed.
         *
         * 通知item是从哪个地方到哪个地方已经改变了
         */
        notifyItemRangeChanged(position, lists.size());
    }
}


/**
 * mLists集合的get方法  通过他可以取得数据的size();
 * @return
 */
public List<String> getLists() {
    return list;
}

//下面是item.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:gravity="center"
        android:textSize="20sp"
        android:textColor="#000000"
        android:text="0000"
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>


//最终效果图







/**

*自我感觉还是挺好用的,如果出现什么问题,可以在下方评论

*来看博客的兄弟姐妹们给个赞

*/





















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值