本文包含recycleView中基本使用(item不可点击)+item可点击的案例。
案例一:item不可点击
基本步骤:
/** * recycelView的使用 * 1 initView,获取recycleView * 2 initData()获取数据 * 3 initRecycle(); * 1 new Layoutmanager,并设置属性 * 2 new RecyleAdapter * 3 recycleViwe.setLayoutManager()+recycleView.setAdapter * 4 类MyRecyleAdapter * 重写oncreateHolder()+onBindViewHolder()+类MyRecyclerViewHolder * 1 类MyRecyclerViewHolder,构造方法+item中控件名称 * 2 重写oncreateHolder(),new Holeder + findviewByIdz找到item中的控件 *
基本的使用和listview差不多,
区别一:在创建adapter的时候 继承的adapter<>要确定泛型
区别二:在创建adapter的时候需要重写oncreateHolder()+onBindViewHolder() 2个方法,
oncreateHolder(),创建viewHolder;
onBindViewHolder(),将数据与holder做绑定,
区别三:xml中定义RecyclerView 要用全路径
android.support.v7.widget.RecyclerView,不然报错(inflater....)
代码地址: http://pan.baidu.com/s/1geo6Gt9
以下内容参考大神:【张鸿洋的博客】
http://blog.csdn.net/lmj623565791/article/details/45059587;
实现listView+GridView+StaggeredGrid
利用recycleView实现以上3中情况,一般需要以下4步,中间2不可以不需要
layoutManager.setOrientation(mLinearLayoutManager);
recyclerView.setItemAnimator(itemAnimator);//
recyclerView.addItemDecoration(mDividerItemDecoration);
recyclerView.setAdapter(adapter);
itemAnimator:<pre class="plain" name="code">https://github.com/gabrielemariotti/RecyclerViewItemAnimators
listview:
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
/**1 setItemAnimator*/
DefaultItemAnimator itemAnimator =new DefaultItemAnimator();
/**下面几种是导入的libary*/
// ScaleInOutItemAnimator itemAnimator = new ScaleInOutItemAnimator(recyclerView);/**item由小变大*/
// SlideInOutLeftItemAnimator itemAnimator = new SlideInOutLeftItemAnimator(recyclerView);/**item由左往右*/
// SlideInOutRightItemAnimator itemAnimator = new SlideInOutRightItemAnimator(recyclerView);/**item由右向左*/
// SlideInOutBottomItemAnimator itemAnimator = new SlideInOutBottomItemAnimator(recyclerView);/*item由下往上**/
// SlideInOutTopItemAnimator itemAnimator = new SlideInOutTopItemAnimator(recyclerView);/**item由上往下*/
// SlideScaleInOutRightItemAnimator itemAnimator = new SlideScaleInOutRightItemAnimator(recyclerView);/**item由右往左 由小变大*/
recyclerView.setItemAnimator(itemAnimator);
/**2 setLayoutManager*/
// LinearLayoutManager layoutManager = new LinearLayoutManager(this);
// layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
/**3 addItemDecoration*/
recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
/**4 setAdapter*/
adapter = new ListGridAdapter(context,list);
recyclerView.setAdapter(adapter);
/**设置点击事件*/ adapter.setOnItemClickListener(new ListGridAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText(ListActivity.this, "clcik", Toast.LENGTH_SHORT).show(); } @Override public void onItemLongClick(View view, int position) { Toast.makeText(ListActivity.this, "long clcik", Toast.LENGTH_SHORT).show(); } });
adapter:
public class ListGridAdapter extends RecyclerView.Adapter<ListGridAdapter.MyHolder> { private static final String TAG = "ListGridAdapter"; public Context context; public List list; public ListGridAdapter(Context context, List<String> list) { this.context = context; this.list = list; } @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(context).inflate(R.layout.item_list_grid,parent,false); MyHolder holder = new MyHolder(itemView); return holder; } @Override public void onBindViewHolder(final MyHolder holder, final int position) { holder.textView.setText((String)list.get(position)); /**如果有回调,则设置点击事件*/ if (mOnItemClickListener !=null){ holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /**pos = position * v = holder.itemView*/ // int pos = holder.getLayoutPosition(); // mOnItemClickListener.onItemClick(holder.itemView,pos); mOnItemClickListener.onItemClick(v,position); } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { // int pos = holder.getLayoutPosition(); // mOnItemClickListener.onItemLongClick(v,pos); mOnItemClickListener.onItemLongClick(v, position); return true; /**return :true if the callback consumed the long click, false otherwise; * true:事件被setOnLongClickListener 消耗掉 * false:事件没有被消耗掉,转而有setOnClickListener消耗*/ } }); } } @Override public int getItemCount() { return list.size(); } class MyHolder extends RecyclerView.ViewHolder{ TextView textView; public MyHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.text); } } /**设置回调*/ public interface OnItemClickListener{ public void onItemClick(View view,int position); public void onItemLongClick(View view,int position); } public OnItemClickListener mOnItemClickListener; public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){ this.mOnItemClickListener = mOnItemClickListener; } /**添加+删除数据*/ public void addItem(int position){ list.add(position,"insert one"); notifyItemInserted(position);/**插入的item在集合list中的位置position,也就是它的角标*/ } public void removeItem(int position){ list.remove(position); notifyItemRemoved(position); } }
gridView 与listview类似:只是GridLayoutManager
GridLayoutManager layoutManager = new GridLayoutManager(context,3); /**gridview水平方向显示,item的width最好>100dp便于观察*/ // GridLayoutManager layoutManager =new GridLayoutManager(context,3,GridLayoutManager.HORIZONTAL,false); recyclerView.setLayoutManager(layoutManager);