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>
这样写就是线性布局,使用线性布局时ayoutmanager构造器的第一个参数为上下文,第二个参数为是垂直还是水平,第三个参数代表了是 倒序排列还是正序排列
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时,正序排列