RecyclerView(一)

  Android系统在5.0版本推出了新控件——RecyclerView。RecyclerView几乎要将我们过去使用的ListView取代掉。因为我们不再需要自己管理一个带有static关键字的ViewHolder,不再需要控制Item的回收,同时,它也为我们提供了Item的添加和减除的动画接口。最后,最重要的是,它为ListView这样的,多项重复布局,提供了更好的解耦。将ListView这样的列表,拆解成了一个没有布局规则的可回收布局,和一个布局管理器。

  本系列将记录我学习使用RecyclerView的过程,希望通过这一次的学习,我能够用它完全地替代掉RecyclerView。

  首先看基本使用:

   RecyclerView的基本使用由4部分构成,分别是RecyclerView、Adapter、ViewHolder和LayoutManager。

  其中,Adapter负责ViewHolder、数据和RecyclerView三者的连接,而LayoutManager则管理了多个ViewHolder之间的关系。

  这里我写了一个简单的例子:

  ViewHolder:

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;

/**
 * Created by fishboneLsy on 2016/6/25.
 */
public class ItemViewHolder<T extends BaseBean> extends RecyclerView.ViewHolder {

    TextView textView;

    public ItemViewHolder(View itemView) {
        super(itemView);
        textView = (TextView) itemView.findViewById(R.id.item_textview_id);
    }

    public void bindViewHolder(T bean , int position){
        if (bean instanceof DataBean){
            textView.setText(((DataBean) bean).getName());
        }
    }
}

  我们在ViewHolder的构造方法中,获取Item子控件的实例。然后,自己编写一个public方法,用于连接数据和ViewHolder。

  Adapter:

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.List;

/**
 * Created by fishboneLsy on 2016/6/25.
 */
public class RecyclerViewAdapter extends RecyclerView.Adapter<ItemViewHolder> {

    Context mContext;
    List<BaseBean> mDataList;

    public RecyclerViewAdapter(Context context , List<BaseBean> dataList){
        mContext = context;
        mDataList = dataList;
    }

    @Override
    public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item_layout , parent , false);
        return new ItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ItemViewHolder holder, int position) {
        holder.bindViewHolder(mDataList.get(position) ,  position);
    }

    @Override
    public int getItemCount() {
        if (mDataList != null){
            return mDataList.size();
        }
        return 0;
    }
}

  Adapter中三个方法,分别是:

  获取ViewHolder实例,通常一个item在一个列表中只会调用一次;

  连接ViewHolder和数据,当item被回收又重新需要显示时,此方法会调用一次;

  获取RecyclerView管理的item个数,在setAdapter和adapter.notifyDataSetChanged时调用。

  最后来看一下RecyclerView的设置:

  

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    RecyclerViewAdapter adapter;

    List<BaseBean> dataList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dataList = new ArrayList<>();

        recyclerView = (RecyclerView) findViewById(R.id.recycler_view_id);

        adapter = new RecyclerViewAdapter(this , dataList);
        recyclerView.setAdapter(adapter);

        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);

        initTest();
        adapter.notifyDataSetChanged();

    }

    private void initTest(){
        for (int i = 0 ; i < 30 ; i++){
            dataList.add(new DataBean("position = " + i));
        }
    }
}

  

  这样,一个基本的类ListView列表就诞生了。目前来说,它的主要优势只有两个,一个是更好看的回收机制,另一个是自由的布局方式。

  缺点就一大堆了:没有HeaderView和FooterView、没有FastScroller等等。接下来,我们将逐步发现它更多的优点,并弥补它的缺陷。

  

  Done~

时间: 2024-10-10 17:47:36

RecyclerView(一)的相关文章

Android零基础入门第64节:揭开RecyclerView庐山真面目

大家还记得之前在第38期~第50期都在学习列表控件吗,其中用了8期讲ListView的使用,相信都已经掌握好了吧.那么本期一起来学习Android 5.X新增的一个列表组件,那就是RecyclerView的使用. 一.RecyclerView概述 从前面的学习我们知道,ListView的功能非常强大,几乎绝大部分应用程序都会使用到,虽然也学会一些方法技巧来提升ListView的效率,但其性能还是不是很完美. 另外ListView的可扩展性相对来说比较弱,以前要实现每个列表项的高度不同的界面,或者

RecyclerView动态添加、删除及点击事件

上一节讲解了RecyclerView的三种显示方式,本节将主要研究一下RecyclerView的动态添加.删除及其单击和长按事件的处理.我们在上一节代码的基础上进行相关操作. 一.修改适配器类MyAdapter,加入添加和删除这两个方法: public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private Context context; private List<String>

安卓易学,爬坑不易——腾讯老司机的RecyclerView局部刷新爬坑之路

针对手游的性能优化,腾讯WeTest平台的Cube工具提供了基本所有相关指标的检测,为手游进行最高效和准确的测试服务,不断改善玩家的体验.目前功能还在免费开放中. 点击地址:http://wetest.qq.com/cube立即体验! 作者:Hoolly,腾讯移动客户端开发工程师. 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处 WeTest导读 安卓开发者都知道,RecyclerView比ListView要灵活的多,但不可否认的里面的坑也同样埋了不少人.下面让我们看看腾讯开发工程

RecyclerVIew 下拉刷新上拉加载

步骤: 寻找RecyclerView 上拉刷新下拉加载开源库 加入到项目中 解决整合进来的bug 待续...

【Android】RecyclerView详解(一)

1.介绍 RecyclerView是比 ListView 更高级且更具灵活性的组件. 此组件是一个用于显示庞大数据集的容器,可通过保持有限数量的视图进行非常有效的滚动操作. 如果您有数据集合,其中的元素将因用户操作或网络事件而发生改变,请使用 RecyclerView 小组件. RecyclerView使用起来很方便因为它: 提供了一种插拔式的体验,高度的解耦,异常的灵活使用; 显示的样式更丰富包括水平,竖直,Grid,瀑布显示方式; 可以通过ItemDecoration自定义Item间的间隔;

【FastDev4Android框架开发】实例解析之SwipeRefreshLayout+RecyclerView+CardView(三十五)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50087873 本文出自:[江清清的博客] (一).前言: 作为Android L开始,Google更新了新控件RecyclerView和CardView,这两个控件在之前的文章中已经做了详细介绍和使用,同时在前面还对下拉刷新组件SwipeRefreshLayout进行相关讲解.本来该专题不在更新了,正好昨天有一个群友问到了怎么样结合SwipeRefreshLayou

Android RecyclerView设置item间距

RecyclerView没有可以直接设置间距的属性,但可以用ItemDecoration来装饰一个item,所以继承重写ItemDecoration就可以实现间距了 public class SpaceItemDecoration extends RecyclerView.ItemDecoration{ private int space; public SpaceItemDecoration(int space) { this.space = space; } @Override public

《android recyclerview的简单使用》

首先是主要布局 <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swipeRefreshLayout" android:layout_width="match_parent" android:layout_height="match_pa

明日之星——RecyclerView(一)

在Listview中使用了很久的viewholder.setTag.getTag来实现Item复用后, Google大大终于看不下去了.推出了明日之星RecyclerView,现已加入support.v7豪华套餐.顾名思义,RecyclerView本身是不管怎么布局的.它本身只负责,加载看得见的viewHolder,释放看不见的viewHolder.这一功能就代替掉了,ListView中麻烦的Item复用设计.而对于布局的控制,RecyclerView则依赖于LayoutManager.下面,我

RecyclerView使用

RecyclerView是android5.0提供的新组件(最新的support.v7中也提供了该组件),类似于ListView,但是比ListView更灵活.更先进,我觉得主要表现在以下几个方面: 1.  把ViewHolder的实现封装起来,规范了ViewHolder,把item的view写入ViewHolder中,通过复用ViewHolder来实现view的复用. 2.  RecyclerView.Adapter中把view的回收和内容改变等操作分开解耦了,比传统的Adapter更为灵活.