RecycleView出有一点时间了,今天我们就来学习一下RecycleView
先上效果图:
步骤:
第一步导入:android-support-v7-recyclerview.jar
然后XML配置:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v7.widget.RecyclerView
android:id="@+id/recy_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
今天我们先来用RecycleView 实现ListView效果,并为他添加 删除和插入数据的动画效果,好的开始~
mRecyclerView = (RecyclerView) findViewById(R.id.recy_view);
mRecyclerView.setLayoutManager(getLayoutManager(LinearLayoutManager.VERTICAL));//设置布局管理器
myRecyleViewAdapter = new MyRecyleViewAdapter(MainActivity.this, mDatas);
mRecyclerView.setAdapter(myRecyleViewAdapter);//这个和ListView一样就不多说了
//为item增加添加和删除动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
是不是很简单啊,接下来上Adapter的代码!
public class MyRecyleViewAdapter extends
RecyclerView.Adapter<MyRecyleViewAdapter.MyViewHolder> {
private Context mContext;
private List<String> mlist;
private onRecycleViewOnClicklistener mRecycleViewOnClicklistener;
public MyRecyleViewAdapter(Context context, List<String> list) {
this.mContext = context;
this.mlist = list;
}
public void setRecycleViewOnClicklistener(
onRecycleViewOnClicklistener mRecycleViewOnClicklistener) {
this.mRecycleViewOnClicklistener = mRecycleViewOnClicklistener;
}
public int getItemCount() {
return mlist.size();
}
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tv_title.setText(mlist.get(position));
holder.position = position;
}
public MyViewHolder onCreateViewHolder(ViewGroup arg0, int position) {
MyViewHolder myViewHolder = new MyViewHolder(LayoutInflater.from(
mContext).inflate(R.layout.recyleview_item, arg0, false));
return myViewHolder;
}
public class MyViewHolder extends ViewHolder {
TextView tv_title;
int position;
public MyViewHolder(View v) {
super(v);
tv_title = (TextView) v.findViewById(R.id.tv_view);
v.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mRecycleViewOnClicklistener.onitemClick(v, position);
}
});
v.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mRecycleViewOnClicklistener.onLongClick(v, position);
return true;
}
});
}
}
/**
* 删除一条数据
*
* @param position
*/
public void removeItem(int position) {
mlist.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, getItemCount());
}
/**
* 添加一条数据
*
* @param str
*/
public void addItem(String str) {
mlist.add(0, str);
notifyItemInserted(0);
notifyItemRangeChanged(0, getItemCount());
}
}
item布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#CC9966" >
<TextView
android:id="@+id/tv_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
</RelativeLayout>
代码量也不多, 不过值得注意的是 删除和添加数据的方法,和之前不一样
</pre><p>notifyItemRemoved 带有动画的删除</p><p>notifyItemRangeChanged顾名思义,可以刷新从positionStart开始itemCount数量的item了(这个不错)</span></p><p>notifyItemInserted 不用说带动画的插入</p>如果对动画不满意的话,就自定义动画...在这里就先不写不过遗憾的是RecyclerView不支持onitemClick事件,不过没关系我们可以自己写一个接口回调给Activity,上面代码已经加了.<pre name="code" class="java">