前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >android 5.0新特性,recyclerview的基本用法,及应注意的问题

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

作者头像
fanfan
发布2022-05-06 19:57:13
发布2022-05-06 19:57:13
37400
代码可运行
举报
文章被收录于专栏:编程思想之路编程思想之路
运行总次数:0
代码可运行

Android5.0新特性 recyclerview的基本用法

1,导入recyclerview的包,有两种方式

       (1)  直接在build.gradle文件中添加一句话:

代码语言:javascript
代码运行次数:0
复制
dependencies {

    compile 'com.android.support:recyclerview-v7:23.1.1'
}

        (2)file--project structure--app---dependencies搜索com.android.support:recyclerview-v7包,点击加号添加

2,在xml中设置

这种写法是正确的,

代码语言:javascript
代码运行次数:0
复制
<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,当然会找不到了、。。

代码语言:javascript
代码运行次数:0
复制
<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,这一句话决定了到底是网格布局还是线性布局,

代码语言:javascript
代码运行次数:0
复制
mRecyclerView = (RecyclerView) findViewById(R.id.recycler);
        GridLayoutManager manager = new GridLayoutManager(getApplicationContext(),4);
        mRecyclerView.setLayoutManager(manager);

这代表是网格布局

代码语言:javascript
代码运行次数:0
复制
<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交替排列,代码如下

代码语言:javascript
代码运行次数:0
复制
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时,正序排列

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档