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

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



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值