控件ListView

ListView的简单用法,先在布局文件中添加ListView控件:

接下来修改MainActivity中的代码:

       由上面的代码可以知道,数据是无法直接传递给ListView的,需要借助适配器来完成。ArrayAdapter可以通过泛型来指定要适配的数据类型,然后在构造函数中把要适配的数据传入即可,ArrayAdapter有多个构造函数,应该根据实际情况选择最合适的一种。在上面的构造函数中,一次传入当前上下文,ListView子项布局的id,以及要适配的数据。在上面代码中我们使用的是android.R.layout.simple_list_item_1作为ListView子项布局的id,这是Android内置的布局文件,里面只有一个TextView,可用于简单地显示一段文本。最后,调用ListView的setAdapter()方法,将构建好的适配器对象传递进去,这样ListView和数据之间就建立完成了。

定制ListView的界面

     只显示一段文本的ListView实在是太单调的,所以需要对ListView的界面进行定制。首先建立一个Fruit类,如下:

     

  然后需要为ListView的子项建立一个自定义的布局,在layout目录下新建fruit_item.xml,代码如下:

接下来我们要创建一个自定义的适配器,这个适配器继承自ArrayAdapter,并将泛型指定为Fruit类,新建FruitAdapter,代码如下:

这样将之前MainActivity中的ArrayAdapter改为FruitAdapter就可以了。

ListView的效率

      目前,ListView的效率是很低的,因为在FruitAdapater的getView()方法中每次都将布局重新加载一次,当ListView快速滚动的时候这就会成为性能的瓶颈,仔细观察,getView()方法中还有一个convertView参数,这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用,那么修改之后的代码如下:

      

    在getView()方法中进行了判断,如果convertView为空,则使用LayoutInflater去加载布局,如果不为空则直接对convertViewh进行重用。这样就大大提高了ListView的运行效率。但是每次还需要通过findViewById()方法来找到控件,也是十分费时的,其实控件也是可以缓存的,如下:

ViewHolder类如下:

      

通过以上两步的优化,ListView的运行效率已经很高了。

ListView的点击事件

       

原文地址:https://www.cnblogs.com/hujingwei/p/5104796.html