Android ListView与RecycleView的对比使用

ListView,就如其名,是用来显示列表的一种View,而RecycleView,是其的增强版,今天带来的是这两个几乎具备相同的功能的对比使用java

先从ListView提及吧
android

ListView:

1.在布局文件中使用ListView,并为其定义一个id,方便咱们以后的调用,宽高与父控件相同
数组

2.准备数据,将数据添加到ArrayAdapter适配器当中app

3.在Activity的java文件中使用findviewbyid找到ListView实例,为其设置Adapteride

4.实现ListView的item项点击事件,直接使用Listview定义的setitemonClick方法就好了
函数

 

这里最为重要的一步实际上是第二步,咱们能够看到下面的代码,定义了一组String类型的数组,以后建立ArrayAdapter适配器,注意String,是一个泛型,后面的构造函数里的参数分别为上下文android.R.Layout.simple_list_item 1是安卓系统给的一个item布局,最后一项是String数组,也就是数据,以后寻找ListView的实例,调用setAdapter方法设置适配器布局

  public class MainActivity extends AppCompatActivity {
        private String[] data = {"Apple" ,"Banana","Orange","WatermeLon"
                "Pear","Grape","Pineapple","Strawberry","Cherry","Mango",
                "Apple","Banana","Orange" ,"Watermelon" ,"Pear" ,"Grape",
                "Pineapple","Strawberry","Cherry","Mango"};
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity.main);
        ArrayAdapter<String> adapter = new ArrayAdapter<String(MainActivity.this, android.R.Layout.simple_list_item 1, data);
        ListView listView = (ListView) findViewById(R.id.list _view);
        listView.setAdapter(adapter);
    }
}

这是一个简单的例子,可是,咱们知道第二个参数是安卓提供的一个item布局,这个布局过于简单,咱们想要实现一个自定义布局怎么办?咱们须要改造一下ArrayAdapter这个适配器测试

下面即是自定义布局并使用的步骤:this

1.建立一个item的布局,也就是咱们的自定义布局
spa

我定义了两个各占一半的textview,记得根标签的高使用wrap_content

 

2.定义一个T类,做为适配器的泛型,(相似以前的String),里面须要一个构造方法,成员变量和get方法

不知道为何会有警告,用的public,能够正常使用,如果改成其余,另外那边调用就会出错了

 

3.建立一个适配器类,使其继承ArrayAdapter<T>(T就是第二步定义的类),里面须要一个构造方法,还须要复写getView方法

 

 

4.准备数据,将数据添加到第三步的适配器类中,以后与上面所说的步骤同样,找到Listview的实例,设置适配器

 

 

 效果

 

 

 RecycleView:

因为这个是Android团队新推出的,须要咱们添加依赖才可使用,记得点击sync now

 

 使用步骤:

1.在布局文件中使用RecyclerView,定义id,宽高与空间相同

2.准备RecyclerView的子项item布局,以后要在适配器类中使用,这里就不在赘述

3.定义个泛型类,如以前在ListView中所说的T类,适配器的泛型

3.定义一个适配器T类,使其继承RecyclerView.Adapter<T.ViewHolder>(ViewHolder是T类中的一个内部类),须要一个构造方法接收数据源,复写三个方法

RecyclerAdapter是继承RecyclerView.Adapter<RecyclerAdapter.ViewHolder>

这个尖括号里的原本应该是RecyclerView.ViewHolder,可是咱们在RecyclerAdapter里定义了一个内部类ViewHolder,使其继承了RecyclerView.ViewHolder,因此咱们就能够在尖括号里直接调用内部类

咱们先来看一下ViewHolder这个内部类,它里面有两个TextView的成员变量,以后,添加一个构造方法,参数是一个View,为这个两个textview经过findviewbyid找到实例

咱们来看RecycleAdapter这个类,在开头咱们就声明了一个List的成员变量students,以后,添加构造方法,传入一个LIst,将其赋值给RecycleAdapter的成员变量students

 

以后须要复写三个方法,OnCreateViewHolder,onBindViewHolder,getItemCount

onCreateViewHolder方法里面,首先就是经过LayoutInflater.from()方法接收一个context,以后,再经过inflate将item布局放进总布局中,以后再将这个view做为参数传到ViewHolder中去,同时,返回一个ViewHolder

onBindViewHolder方法,由list的get方法,得到list里面的某个对象,以后,由holder调用两个TextView的setText方法进行设置,触类旁通,若是是imageview的话,一样可使用setresource设置其显示的图片,设置的参数,咱们能够直接由Student类中的get方法得到

 getItemCount 就是得到所有item的数量,这里item数量其实就是list中的项目,直接返回其的size就好了

4.准备数据,添加到适配器中

5.建立一个布局管理器LayoutManager,便于RecycleView设置布局,这里布局管理器有几种

一种的像LIstView的垂直排列,LinearlayoutManager

咱们也能够将其改成水平排列,只需调用linearLayoutManger的setOrientation,设置为LinearLayoutManager.HORIZONTAL

还有GiidLayout网格布局 StaggerGildLayoutManager瀑布流布局,使用方法如上,不过,参数有所区别,想了解更多请转百度

 

6.经过findviewbyid方法找到RecycleView的实例,为其设置LayoutManager,设置Adapter

 7.设置onClick方法,RecycleView里没有onClick方法,须要咱们本身写,在哪里写呢?在RecycleAdapter中的onBindViewHolder方法中

咱们用Viewholder来找到子项,为其设置一个onClickListener,以后,为其设置onClick事件处理

上面这是比较简单的一种,还有其余几种方法,我在这也不一一测试,感兴趣的话能够本身研究研究

参考地址:http://blog.csdn.net/RaphetS/article/details/51254538

 

补充:RecyclerView更新数据

更新数据方法使用的是adpater的notifyDataSetChanged()方法

使用这个方法前,须要对原来的list作出相应的改变,mlist是以前用来new adpater中使用的list

 

更多的RecycleView高级使用,请参考下面的地址

http://blog.csdn.net/skykingf/article/details/50827141

http://www.jianshu.com/p/58ca20e1a5d6

相关文章
相关标签/搜索