RecyclerView 初次体验,实现增加删除条目及item长按和点击事件

RecyclerView 已经出来很长时间了,但是一直都没有去体验一把这个高大上的控件,要准备开始用AndroidStadio,就一起当练手了。

       RecyclerView是谷歌V7包下新增的控件( android.support.v7.widget.RecyclerView ),用来代替ListView使用,他可以通过设置LayoutManager来快速实现listview、gridview、瀑布流的效果,而且还可以设置横向和纵向显示,添加动画效果也非常简单(自带了ItemAnimation,可以设置加载和移除时的动画,方便做出各种动态浏览的效果)

好啦,先上图:


也是才开始使用的AndroidStadio,要使用RecyclerView,首先要在Module 下的build.gradle中添加包的引用:

compile 'com.android.support:recyclerview-v7:23.1.1'
然后在xml中进行引用:

    android:id="@+id/listview_recy"
    android:layout_width="wrap_content"
    android:background="#00ff00"
    android:layout_height="wrap_content">
MainActivity中:

listview_recy = (RecyclerView) findViewById(R.id.listview_recy);
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);

listview_recy.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyAdapter();
listview_recy.setItemAnimator(new DefaultItemAnimator());
listview_recy.setAdapter(adapter);
      有两个Button,一个是增加条目,一个是删除条目

然后就到了关键的适配器了:

private class MyAdapter extends RecyclerView.Adapter {
    //
 public OnRecyclerViewItemClickListener mOnItemClickListener = null;//点击
 public OnRecyclerViewLongItemClickListener mOnLongItemClickListener = null;//长按
 public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {
      this.mOnItemClickListener = listener;
  }
 public void setOnLongItemClickListener(OnRecyclerViewLongItemClickListener listener) {
      this.mOnLongItemClickListener = listener;
 }

  @Override
 public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(                                                 R.layout.mylist_item, parent, false);
        MyViewHolder holder = new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyAdapter.MyViewHolder holder, final int position) {
        holder.tv1.setText(datas.get(position));
    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView tv1;
        public MyViewHolder(View itemView) {
            super(itemView);
            tv1 = (TextView) itemView.findViewById(R.id.tv1);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    if (mOnItemClickListener != null) {
                        mOnItemClickListener.onItemClick(v, getAdapterPosition());
                    }
                }
            });

            itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    if (mOnLongItemClickListener != null) {
                  mOnLongItemClickListener.onLongItemClick(v, getAdapterPosition());
                    }
                    return true;
                }
            });
        }
    }
}
  这个适配器里面定义了两个接口,分别是item的点击事件和长按事件,

public interface OnRecyclerViewLongItemClickListener {
    void onLongItemClick(View view, int position);
}

public interface OnRecyclerViewItemClickListener {
    void onItemClick(View view, int position);
}
item的点击和长按时间,基本就和listview的onItemClickListener一样了:

//item的点击事件
adapter.setOnItemClickListener(new OnRecyclerViewItemClickListener() {
    @Override
    public void onItemClick(View view, int position) {
        String s = datas.get(position);
        Toast.makeText(getApplicationContext(), s + "---点击",                                                                  Toast.LENGTH_SHORT).show();
    }
});
//item的长按事件
adapter.setOnLongItemClickListener(new OnRecyclerViewLongItemClickListener() {
    @Override
    public void onLongItemClick(View view, int position) {
        String s = datas.get(position);
        Toast.makeText(getApplicationContext(), s + "---长按",                                                                   Toast.LENGTH_SHORT).show();
    }
});
接下来就是添加和删除item了,很简单,RecyclerView本身就已经实现了item的动画,只需要调用一下几个函数就可以开增删item,即可出现默认动画,如果你不满足这个默认的,当然你可以DIY你自己的动画RecyclerView.ItemAnimator的接口方法。

notifyItemChanged(int)
notifyItemInserted(int)
notifyItemRemoved(int)
notifyItemRangeChanged(int, int)
notifyItemRangeInserted(int, int)
notifyItemRangeRemoved(int, int)
这里就简单的使用下增删的默认动画

btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (datas.size() > 4) {
                    datas.add(4, "我是加的");
                    adapter.notifyItemInserted(4);
//                    adapter.notifyItemRangeChanged(2, 2);//刷新从position以后的2条数据
                }
            }
        });

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (datas.size() > 6) {
                    datas.remove(6);
                    adapter.notifyItemRemoved(6);
                }
            }
        });
这其中也配合使用了CardView ,也只需要依赖下就好了  
compile 'com.android.support:cardview-v7:23.1.1'

好了,就这么多了,仅仅是开始,主要还是熟悉AndroidStadio和RecyclerView,Code写的不好,还请多多指教给建议~~

Code传送门:http://download.csdn.net/detail/flyingzhlunasea/9425962







你可能感兴趣的:(RecyclerView 初次体验,实现增加删除条目及item长按和点击事件)