RecyclerView的简单用法
RecyclerView的简单用法
公子彦 发表于2年前
RecyclerView的简单用法
  • 发表于 2年前
  • 阅读 102
  • 收藏 1
  • 点赞 2
  • 评论 2

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 最近刚刚接触了RecyclerView,研究之后总结了它的简单的用法,另外写了一个Demo,链接在最后,感兴趣的朋友可以看一下。

        在Android开发中,ListView是用途非常广泛的控件,与它类似的还有GridView。为了统一性和代码的解耦性,google在V7包中新增了RecyclerView控件,来代替ListView和GridView控件。

        RecyclerView的用法其实非常简单,它可以通过设置LayoutManager来控制它的布局,官方给出了三种布局可供选择,分别是线性布局LinearLayoutManager、九宫格布局GridLayoutManager以及瀑布流布局StaggeredGridLayoutManager。也就是说recyclerView只负责创建和显示列表,布局什么的事情都交给LayoutManager来做。但是RecyclerView也有它的不便,它并没有自己的onItemClick方法,所以要设置点击事件必须自己去写,关于具体写法我会再Demo中去更新。

    废话不多说,下面我来介绍一下RecyclerView的简单用法,这里是以线性布局为例,最后又项目实例下载,不愿意看我废话的可以直接去下载。

    1、现在Android开发最常用的就是Android Studio,所以这里也是以AS为例,首先我们要做的就是添加依赖,找到工程下的build.gradle,加入如下代码:

compile 'com.android.support:recyclerview-v7:23.3.0'

    注意:版本号根据你自己的编译版本决定,一级版本号必须相同,二级版本号可以有差异,另外如果想让自己的列表的item有卡片式效果可以添加下面这个依赖,使用的时候直接用cardView控件包裹item布局即可。

compile 'com.android.support:cardview-v7:23.2.1'

    2、添加依赖同步成功以后,在XML文件中 加入recyclerView控件如下,另外还需要一个列表的item布局,只需要一个TextView,这里我就不再多写了。

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


</android.support.v7.widget.RecyclerView>

3、添加好依赖、写好布局,现在我们来看一下Java代码应该怎么写,实际上只需要三步

1)RecyclerView mRecyclerView =  (RecyclerView)findViewById(R.id.recyclerView);

2)mRecyclerView.setLayoutManager(

            new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));

3) mRecyclerView.setAdapter(new MyAdapter(mList));

    其中第一步就不必多说,第二步是设置布局的关键一步,setLayoutManager需要的参数就是RecyclerView.LayoutManager对象,这里我写的是匿名对象,也可以先声明LayoutManager对象写好配置再传进来。匿名LayoutManager对象有三个参数,第一个获取Activity;第二个参数设置方向,一般是VERTICAL,垂直滑动;第三个参数暂时用不到,写false就好。

代码如下:

private RecyclerView mRecyclerView;
    private List<String> mListView = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.recycler_view);

        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
        getData();
        mRecyclerView.setAdapter(new MyAdapter(mListView));

    }
    //模拟数据
    private void getData(){
        for (int i = 0; i < 100; i++) {
            mListView.add("RecyclerView列表"+i);
        }
    }
......
}

    第三步中给RecyclerView添加适配器,这里需要注意的是RecyclerView类中已经提供了一个Adapter,所以我们不需要再使用BaseAdapter,同时Recycler还提供了一个内部的ViewHolder来进行优化。可以看到RecyclerView在Adapter中提供了三个重写方法onCreateHolderView、onBindHolderView、getItemCount,另外如果有需要还可以重写getItemViewType方法。从方法名字不难看出,onCreateViewHolder用于创建视图,onBindHolderView用户绑定数据,getItemCount用户获取项的数量。getItemViewType可以用于定制列表头部和尾部布局的时候使用,返回视图类型。


    private static class ViewHolder extends RecyclerView.ViewHolder{
        private TextView mTxt;
        public ViewHolder(View itemView) {
            super(itemView);
            mTxt = (TextView) itemView.findViewById(R.id.item_txt);
        }
    }

    private class MyAdapter extends RecyclerView.Adapter<ViewHolder>{
        private List<String> mList;

        public MyAdapter(List<String> mList) {
            this.mList = mList;
        }

        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View viewPager = getLayoutInflater().inflate(R.layout.item_list,parent,false);
            ViewHolder mViewHolder = new ViewHolder(viewPager);
            return mViewHolder;
        }
        
        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            holder.mTxt.setText(mList.get(position));

        }

        @Override
        public int getItemCount() {
            return mList.size();
        }
    }

           保存代码运行即可实现列表效果,如图

  

 

        项目下载地址:https://github.com/fanKarl/recyclerview-master.git

        在项目里我做了三种效果,第一种就是上边所讲方法;第二种则是列表头部自定制,如下图所示;第三种则是把RecyclerView的方法抽象成父类,由子类去继承,节约开发成本。

        

 

这里只是RecyclerView的简单介绍,如果大家想看具体的介绍,网上也是很有很多的,这里推荐一篇Blog,Frank-Zhu的RecyclerView使用详解

http://frank-zhu.github.io/android/2015/01/16/android-recyclerview-part-1/

 

补充----------------------------------------------------------------------

我写了一个带有刷新和点击事件的Demo。下载路径如下:

https://github.com/fanKarl/recyclerview-and-refresh-master

 

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 2
博文 9
码字总数 6260
评论 (2)
莱特大心
沙发
莱特大心
火钳刘明
×
公子彦
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: