android 5.0新特性,recyclerview的基本用法,及应注意的问题

来源:互联网 发布:seo标题 编辑:程序博客网 时间:2024/05/01 08:38

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时,正序排列



2 0
原创粉丝点击