Android控件RecyclerView与ListView的异同
优点:Android中RecyclerView控件支持线性布局、网格布局、瀑布流布局 三种,还可以而且同时还能够控制横向和纵向滚动。自带添加item和删除item的动画效果
缺点:RecyclerView自身没有点击事件,需要写接口,在onBindViewHolder方法中添加点击事件
优点:Android中RecyclerView控件支持线性布局、网格布局、瀑布流布局 三种,还可以而且同时还能够控制横向和纵向滚动。自带添加item和删除item的动画效果
缺点:RecyclerView自身没有点击事件,需要写接口,在onBindViewHolder方法中添加点击事件
实现效果图:
第一步:在build.gradle中添加一行,引用类库
compile 'com.android.support:recyclerview-v7:23.2.1'
第二步:在activity_main.xml文件中,添加控件
<android.support.v7.widget.RecyclerView android:id="@+id/recy_list" android:dividerHeight="1dp" android:layout_width="match_parent" android:layout_height="match_parent" />
第三步:新建一个item.xml,这个布局主要用于显示RecyclerView列表项的布局,读者可根据实际情况自行添加
第四步:新建一个适配器,用于设置RecyclerView的列表项布局,并且添加点击事件
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> { private OnItemClickListener mOnItemClickListener; private List<Bitmap> mDatas; private Context mContext; private LayoutInflater inflater; public MyRecyclerAdapter(Context context, List<Bitmap> datas){ this. mContext=context; this. mDatas=datas; inflater=LayoutInflater. from(mContext); } @Override public int getItemCount() { return mDatas.size(); } //重写onCreateViewHolder方法,返回一个自定义的ViewHolder @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.item_home,parent, false); MyViewHolder holder= new MyViewHolder(view); return holder; } class MyViewHolder extends RecyclerView.ViewHolder{ ImageView iv; public MyViewHolder(View view) { super(view); iv=(ImageView) view.findViewById(R.id.iv_item_adapter); } } public interface OnItemClickListener{ void onClick( int position); void onLongClick( int position); } public void setOnItemClickListener(OnItemClickListener onItemClickListener ){ this.mOnItemClickListener=onItemClickListener; } //填充onCreateViewHolder方法返回的holder中的控件 @Override public void onBindViewHolder(MyViewHolder holder, final int position) { holder. iv.setImageBitmap(mDatas.get(position)); if( mOnItemClickListener!= null){ holder. itemView.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { mOnItemClickListener.onClick(position); } }); holder. itemView.setOnLongClickListener( new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { mOnItemClickListener.onLongClick(position); return false; } }); } } }
第五步:在MainActivity文件中,导入布局,设置适配器
public class MainActivity extends Activity { //参考网址 https://blog.csdn.net/dmk877/article/details/50816933 private RecyclerView recyclerView; private List<Bitmap> mDatas; private MyRecyclerAdapter recycleAdapter; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout. test); recyclerView = (RecyclerView) findViewById(R.id.recy_list); initData(); recycleAdapter= new MyRecyclerAdapter(ImageActivity.this , mDatas ); /**第一种形式:普通的listview列表效果 LinearLayoutManager layoutManager = new LinearLayoutManager(this); //设置布局管理器 recyclerView.setLayoutManager(layoutManager); //设置为垂直布局,这也是默认的 layoutManager.setOrientation(OrientationHelper.VERTICAL); //设置Adapter recyclerView.setAdapter( recycleAdapter); //设置增加或删除条目的动画 recyclerView.setItemAnimator(new DefaultItemAnimator()); */ /**第二种形式:设置成gridview形式 LinearLayoutManager layoutManager = new LinearLayoutManager(this); //设置布局管理器 recyclerView .setLayoutManager(new GridLayoutManager( this,4)); //设置为垂直布局,这也是默认的 layoutManager.setOrientation(OrientationHelper.VERTICAL); //设置Adapter recyclerView.setAdapter( recycleAdapter); //设置增加或删除条目的动画 recyclerView.setItemAnimator(new DefaultItemAnimator()); */ /**第三种形式:横向左右滑动 StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.HORIZONTAL); //设置布局管理器 recyclerView.setLayoutManager(layoutManager); layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); recyclerView.setAdapter( recycleAdapter); //设置增加或删除条目的动画 recyclerView.setItemAnimator(new DefaultItemAnimator()); */ LinearLayoutManager layoutManager = new LinearLayoutManager(this); //设置布局管理器 recyclerView .setLayoutManager(new GridLayoutManager( this,4)); //设置为垂直布局,这也是默认的 layoutManager.setOrientation(OrientationHelper.VERTICAL); //设置Adapter recyclerView.setAdapter( recycleAdapter); //设置增加或删除条目的动画 recyclerView.setItemAnimator(new DefaultItemAnimator()); recycleAdapter.setOnItemClickListener(new MyRecyclerAdapter.OnItemClickListener() { @Override public void onLongClick(int position) { Toast.makeText(ImageActivity.this,"onLongClick事件您点击了第:"+position+"个Item",Toast.LENGTH_SHORT).show(); } @Override public void onClick(int position) { Toast.makeText(ImageActivity.this,"onClick事件您点击了第:"+position+"个Item",Toast.LENGTH_SHORT).show(); } }); } private void initData() { mDatas = new ArrayList<Bitmap>(); mDatas.add(BitmapFactory.decodeResource(getResources(),R.mipmap.a1)); mDatas.add(BitmapFactory.decodeResource(getResources(),R.mipmap.a2)); mDatas.add(BitmapFactory.decodeResource(getResources(),R.mipmap.a3)); mDatas.add(BitmapFactory.decodeResource(getResources(),R.mipmap.a4)); mDatas.add(BitmapFactory.decodeResource(getResources(),R.mipmap.a5)); mDatas.add(BitmapFactory.decodeResource(getResources(),R.mipmap.a6)); } }