RecyclerView是Android5.0以后引入的一个新控件。
为了支持5.0以前的版本,提供了v7支持包。
在使用RecyclerView时需导入v7包。
其中较为重要的类有:
1.Adapter 继承RecyclerView.Adapter<VH>
2.ViewHolder
3.LayoutManager 设置Item的位置,以及如何显示。 lv,gv等
4.ItemDecoration 设置Item之间的分隔。网上默认有个类DividerItemDecoration.java
5.ItemAnimator 设置item添加删除时的动画,系统自带一个DefaultAnimotor动画,可从github上查找需要的动画效果。
使用RecyclerView主要分以下几个步骤:
1.导入v7包。
2.添加布局文件。
<android.support.v7.widget.RecyclerView android:id="@+id/id_recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
3.实现Recyclerview的适配器
package linqh.recyclerview; 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 java.util.ArrayList; /** * Created by linqh on 2016/2/28. */ public class SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.MyHolder> { private ArrayList<String> mData; private Context mContext; private LayoutInflater mInflater; private OnItemClickListener mOnItemClickListener; public interface OnItemClickListener{ void onItemClick(View view,int position); void onItemLongClick(View view,int position); } public void setOnItemClickListener(OnItemClickListener listener){ this.mOnItemClickListener=listener; } public SimpleAdapter(ArrayList<String> mData, Context mContext) { this.mData = mData; this.mContext = mContext; mInflater = LayoutInflater.from(mContext); } @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = mInflater.inflate(R.layout.layout, parent, false); MyHolder holder = new MyHolder(view); return holder; } @Override public void onBindViewHolder(final MyHolder holder, final int position) { holder.tv.setText(mData.get(position)); if(mOnItemClickListener!=null){ holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOnItemClickListener.onItemClick(holder.itemView,position); } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { mData.remove(position); notifyItemRemoved(position); mOnItemClickListener.onItemLongClick(holder.itemView,position); return false; } }); } } @Override public int getItemCount() { return mData.size(); } public class MyHolder extends RecyclerView.ViewHolder { private TextView tv; public MyHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv_content); } } }
4.设置Recyclerview的LayoutManager
mRecyclerview.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
mRecyclerview.setLayoutManager(new GridLayoutManager(this,3));
mRecyclerview.setLayoutManager(new StaggeredGridLayoutManager(5,StaggeredGridLayoutManager.HORIZONTAL));
5.添加ItemDecoration(或用margin,使间隔线为背景色)
mRecyclerview.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST));
6.在适配器中添加Item的点击回调方法
效果图如下