Android5.0新特性 recyclerview的基本用法
1,导入recyclerview的包,有两种方式
(1) 直接在build.gradle文件中添加一句话:
dependencies { compile 'com.android.support:recyclerview-v7:23.1.1' }
(2)file--project structure--app---dependencies搜索com.android.support:recyclerview-v7包,点击加号添加
2,在xml中设置
这种写法是正确的,
<android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="wrap_content"/>
但有 的人会写成如下这样,像我, 刚开始 用时直接这样用,会出现一个问题:
ClassNotFoundException: Didn't find class "android.view.RecyclerView"。。。
如果这样写程序运行时会在view下寻找recyclerview,当然会找不到了、。。
<span style="font-size:18px;"><RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="wrap_content"/></span>
3,Activity中定义
使用recyclerview时,需要setlayoutManager,这一句话决定了到底是网格布局还是线性布局,
mRecyclerView = (RecyclerView) findViewById(R.id.recycler); GridLayoutManager manager = new GridLayoutManager(getApplicationContext(),4); mRecyclerView.setLayoutManager(manager);
<span style="font-size:18px;">LinearLayoutManager manager = new LinearLayoutManager(getApplicationContext(),LinearLayoutManager. VERTICAL,true); mRecyclerView.setLayoutManager(manager);</span>
4,为recyclerview设置适配器adpter
我想让recyclerview实现imageview+button+textview交替排列,代码如下
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener { private Context mContext; private List<String> mList; public MyAdapter(Context mContext, List<String> list) { this.mContext = mContext; this.mList = list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; switch (viewType) { case Types.TEXTTYPE: view = View.inflate(mContext, R.layout.layout_item_text, null); return new TextViewHolder(view); case Types.BUTTONTYPE: view = View.inflate(mContext, R.layout.layout_item_button, null); return new ButtonViewHolder(view); case Types.IMGTYPE: view = View.inflate(mContext, R.layout.layout_item_image, null); return new ImgViewHolder(view); default: return null; } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof TextViewHolder) { TextViewHolder textHolder = (TextViewHolder) holder; textHolder.mText.setText(mList.get(position)+"\n"+"text"+position); }else if (holder instanceof ButtonViewHolder){ ButtonViewHolder buttonViewHolder = (ButtonViewHolder) holder; buttonViewHolder.mButton.setText(mList.get(position)+"\n"+"button"+position); }else if (holder instanceof ImgViewHolder){ ImgViewHolder imgViewHolder = (ImgViewHolder) holder; imgViewHolder.mImage.setBackgroundResource(R.mipmap.ic_launcher); } } @Override public int getItemCount() { int count; count = mList.size(); return count; } @Override public int getItemViewType(int position) { switch (position % 3) { case 0: return Types.IMGTYPE; case 1: return Types.BUTTONTYPE; case 2: return Types.TEXTTYPE; default: return super.getItemViewType(position); } } @Override public void onClick(View v) { } private static class Types { private static final int TEXTTYPE = 2; private static final int BUTTONTYPE = 1; private static final int IMGTYPE = 0; } private class TextViewHolder extends RecyclerView.ViewHolder { TextView mText; public TextViewHolder(View itemView) { super(itemView); mText = (TextView) itemView.findViewById(R.id.text); } } private class ButtonViewHolder extends RecyclerView.ViewHolder { Button mButton; public ButtonViewHolder(View itemView) { super(itemView); mButton = (Button) itemView.findViewById(R.id.button); } } private class ImgViewHolder extends RecyclerView.ViewHolder { ImageView mImage; public ImgViewHolder(View itemView) { super(itemView); mImage = (ImageView) itemView.findViewById(R.id.image); } } }
接下来看效果图吧
这是线性布局,当线性布局的第三个参数为true时,倒序排列
这是表格布局
这是线性布局,当第三个参数为false时,正序排列