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这个适配器里面定义了两个接口,分别是item的点击事件和长按事件,{ // 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; } }); } } }
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