Android 新控件RecyclerView

RecyclerView 是 android-support-v7-21 版本中新增的一个 Widgets。我们可以使用RecyclerView非常简单的实现横向竖向的ListView.GridView.以及瀑布流的效果.先看一下项目的实现的效果

是不是很炫?使用RecyclerView可以非常简单的实现.

RecyclerView 特性 1.不关心Item是否显示在正确的位置以及如何显示 2.不关心item之间如何分割 3.不关注Item增加与删除的动画效果 4.它仅仅只是关注如何回收和复用item 贴出部分代码:

mRecyclerView = (RecyclerView) findViewById(R.id.rv);//设置它的AdaptermyRecyclerViewListAdapater = new MyRecyclerViewListAdapater(this,sourceDatas);mRecyclerView.setAdapter(myRecyclerViewListAdapater);//设置它的LayoutManage , 通过 LayoutManager去设置它的显示方式LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);mRecyclerView.setLayoutManager(linearLayoutManager);mRecyclerView.setItemAnimator(new DefaultItemAnimator());myRecyclerViewListAdapater.setOnItemClickListener(new MyRecyclerViewListAdapater.OnItemClickListener() {(View view, int position) {Toast.makeText(MainActivity.this,”click : ” + position,Toast.LENGTH_SHORT).show();}(View view, int position) {myRecyclerViewListAdapater.deleteItem(position);return false;}});

Adapter代码

public .Adapter<MyRecyclerViewListAdapater.MyListHolder> {private Context context;protected List<String> sourceDatas;private LayoutInflater layoutInflater;public OnItemClickListener mOnItemClickListener;public MyRecyclerViewListAdapater(Context context,List<String> sourceDatas){this.context = context;this.sourceDatas = sourceDatas;layoutInflater = LayoutInflater.from(context);}@Overridepublic MyRecyclerViewListAdapater.MyListHolder onCreateViewHolder(ViewGroup viewGroup, int i) {View view = layoutInflater.inflate(R.layout.item,viewGroup,false);MyListHolder myListHolder = new MyListHolder(view);return myListHolder;}@Overridepublic void onBindViewHolder(final MyListHolder viewHolder, final int i) {viewHolder.textView.setText(sourceDatas.get(i));itemClick(viewHolder);}/*** ItemView点击事件*/protected void itemClick(final MyListHolder viewHolder){viewHolder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(null != mOnItemClickListener){int postion = viewHolder.getLayoutPosition();mOnItemClickListener.onItemClickListener(viewHolder.itemView,postion);}}});viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {if(null != mOnItemClickListener){int position = viewHolder.getLayoutPosition();return mOnItemClickListener.onLongItemClickListener(viewHolder.itemView,position);}return false;}});}/*** 方法返回item的数量* */@Overridepublic int getItemCount() {return sourceDatas.size();}/*** 添加item*/public void addItem(int position){sourceDatas.add(position,”Add Item”);notifyItemInserted(position);}/*** 删除Item*/public void deleteItem(int positon){sourceDatas.remove(positon);notifyItemRemoved(positon);}/*** 设置item点击接口*/public void setOnItemClickListener(OnItemClickListener onItemClickListener){this.mOnItemClickListener = onItemClickListener;}/*** Recycler本身并没有给我们提供ItemClick事件,这里需要我们自己实现这个接口* 点击接口* */public interface OnItemClickListener{//点击事件public void onItemClickListener(View view,int position);//长按事件public boolean onLongItemClickListener(View view,int position);}.ViewHolder{TextView textView;//继承 RecyclerView.ViewHolder 必须要实现它的构造方法//可以看到在它的构造方法接收到一个View的参数,,这个View就是我们创建的ItemViewpublic MyListHolder(View itemView) {super(itemView);textView = (TextView) itemView.findViewById(R.id.tv_list_item);}}}

布局:

<FrameLayout 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”tools:context=”.MainActivity”><androidandroid:id=”@+id/rv”android:layout_width=”match_parent”android:layout_height=”match_parent” /></FrameLayout>

源码地址:

艰苦能磨练人的意志。

Android 新控件RecyclerView

相关文章:

你感兴趣的文章:

标签云: