RecyclerView的使用
要使用recyclerView,需在本项目的build.gradle中添加
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
RecyclerView可以实现Listview,Girdview的展示样式,以及实现瀑布流的样式
展示横向,竖向排列的样式:
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);//VERTICAL表示竖向排列,Horizontal表示横向排列展示网格的样式:
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);//3是表示内容占3列展示瀑布流的样式:
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
recyclerView = (RecyclerView) findViewById(R.id.recyclerView); //RecyclerView的展示样式 linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); gridLayoutManager = new GridLayoutManager(this, 3); //设置以瀑布流形式展示 StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); //设置RecyclerView的展示样式 recyclerView.setLayoutManager(linearLayoutManager);
RecyclerView的item想要展示不同的样式,adapter类这样写:
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<String> data; public MyAdapter() { data = new ArrayList<String>(); for (int i = 0; i < 30; i++) { data.add("这是条目" + i); } } private OnItemClickListener onItemClickListener; private OnItemLongClickListener onItemLongClickListener; //创建布局和viewHolder @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = null; RecyclerView.ViewHolder holder = null; switch (viewType) { case 0: //inflate的时候,需要传入parent和attachToRoot==false; 使用传入三个参数的方法 view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view, parent, false); holder = new MyViewHolder(view); break; case 1: view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view2, parent, false); holder = new MyViewHolder2(view); break; } return holder; } //绑定数据 @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { switch (getItemViewType(position)) { case 0: MyViewHolder holder1 = (MyViewHolder) holder; holder1.showImage.setImageResource(R.drawable.bagua); holder1.showText.setText(data.get(position)); break; case 1: MyViewHolder2 holder2 = (MyViewHolder2) holder; holder2.item2_iv.setImageResource(R.drawable.xing); holder2.item2_tv.setText(data.get(position)); break; } } @Override public int getItemViewType(int position) { if (position % 2 == 0) { return 0; } else { return 1; } } @Override public int getItemCount() { return data.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { private final ImageView showImage; private final TextView showText; View itemView; public MyViewHolder(View itemView) { super(itemView); showImage = (ImageView) itemView.findViewById(R.id.showImage); showText = (TextView) itemView.findViewById(R.id.showText); this.itemView = itemView; } } public class MyViewHolder2 extends RecyclerView.ViewHolder { private final ImageView item2_iv; private final TextView item2_tv; public MyViewHolder2(View itemView) { super(itemView); item2_iv = (ImageView) itemView.findViewById(R.id.item2_Iv); item2_tv = (TextView) itemView.findViewById(R.id.item2_Tv); } }