新视图RecyclerView(一)

RecyclerView?这是什么东西?这是Android中V7包提供的新视图!
作用和ListView,GridView都差不多,都是展现那种滑动的视图的。但是看他的名字,Recycler是回收站的意思,回收视图?对,你在使用ListView的时候,还在写if convertView == null 吗? RecyclerView的出现解决了你滑动视图的时候,不用考虑视图回收问题。他已经帮助你办完这件事了!

简单的说,RecyclerView不管视图长啥样,不管分隔线啥样,他只关注视图的回收问题。然后另提供了一些类,用这些类管理视图样式。这样耦合性非常的低,用法异常的灵活!

这里我用的是Android Studio,因为Eclipse的话会有不兼容的现象,还要从网上下载Jar包,导入,有点麻烦。下面说一下Android Studio怎么导入RecyclerView的
这里写图片描述
这里写图片描述
这里写图片描述

可以看出来,AndroidStudio导入是非常便捷的,而且不用担心版本不兼容的问题。下面就介绍使用方法

1.其实你学会了一种视图,其他的用法都是差不多的。首先要在主布局文件中添加这个视图

<!--activity_main.xml-->
<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerView_show"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>

2.和ListView一样,你也需要在MainActivity里做一些中规中矩的操作。初始化视图,创建List集合,创建Adapter,setAdapter…,为了方便大家看,我就不封装到方法里了,没几行代码的玩意!

/*=====================MainActivity=====================*/

    private RecyclerView mRecyclerView;//控件
    private List<String> mList;//数据集

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView_show);
        mList = new ArrayList<String>();

        //初始化数据源
        for(int x = 1; x <= 100; x++)
        {
            mList.add("item" + x);
        }


        //设置数据适配器
        mRecyclerView.setAdapter(new MyAdapter(this,mList));

        //设置布局管理器
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    }

这里你可能有两处疑问,第一就是MyAdapter的具体实现,第二就是mRecyclerView.setLayoutManager(…),其实刚才就说过了,这些显示和样式不归RecyclerView管,都是另有类来管理的,这里用的就是LinearLayoutManager对象来管理和设置布局,如果你不设置这句话,当然不会报错,只是什么都不会显示而已!

那在看一下MyAdapter

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>
{
    private List<String> mList;
    private Context mContext;
    private LayoutInflater mInflater;

    public MyAdapter(Context context,List<String> list)
    {
        this.mContext = context;
        this.mList = list;
        mInflater = LayoutInflater.from(context);
    }

    /**
     * 见名知意,创建ViewHolder
     * @param parent
     * @param viewType
     * @return
     */
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View v = mInflater.inflate(R.layout.item_textview, parent, false);
        MyViewHolder holder = new MyViewHolder(v);
        return holder;
    }

    /**
     * 绑定并设置ViewHolder
     * @param holder
     * @param position
     */
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.tv.setText(mList.get(position));
    }

    /**
     * 这个方法大家都比较熟悉,和ListView中Adapter里的一样
     * @return
     */
    @Override
    public int getItemCount()
    {
        return mList.size();
    }


    public class MyViewHolder extends RecyclerView.ViewHolder
    {
        TextView tv;

        /**
         * 构造函数
         * @param 'itemView参数:用于接受inflate的item视图'
         */
        public MyViewHolder(View itemView)
        {
            super(itemView);
            tv = (TextView)itemView.findViewById(R.id.textView_show);
        }
    }
}

解释一下上面的代码
这里的成员变量和构造函数就不解释了,和传统ListView都是一样的,还有inflater的布局里面就一个TextView。

这里继承的不是传统的BaseAdapter,而是RecyclerView提供的Adapter类,并且强制使用了泛型ViewHolder,而这里是创建你的数据适配器,所以泛型要放你的ViewHolder,于是就创建了一个MyViewHolder,继承了ViewHolder,里面的内容和传统的ListView中ViewHolder一样,只不过是分开写罢了!

那继承了RecyclerView.Adapter后,就需要重写父类的方法,可以看到一共有三个
getItemCount(),这个大家肯定很熟悉喽!
onCreateViewHolder()见名知意,创建ViewHolder
onBindViewHolder(),设置和绑定ViewHolder
这里将创建ViewHolder和设置绑定ViewHolder分为了两个函数。用的话也是比ListView中的Adapter爽的多啊,划分的很清楚啊!

=========================================
好了,你现在可以运行你的程序了!啊?连分隔线都没有,这么磕碜?加一个,于是你在你的RecyclerView里面打上了divider属性,可惜没屁用!一开始就说,RecyclerView只管视图的回收,长的磕碜好看那都是由别的对象来管理。这章就不具体说了,下一篇文章会介绍
ItemDecoration
ItemAnimator
特效,美观?呵呵,不在话下!

OK,第一章就分享到这里,这里只是先让你了解一些RecyclerView的基本概念和基本使用,如有疑问或意见,欢迎QQ骚扰:997797281!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值