定制ListView的界面(让列表中不仅有文字还有图片fruitImage.setImageResource(fruit.getImageId());)
1.定义自己的实体类来作为ListView的适配类型如:
public class Fruit {
    private String name;//水果的名字
    private int imageId;//水果的图片资源
    public Fruit(String name,int imageId)
    {
        this.name=name;
        this.imageId=imageId;
    }
    public String getName()
    {
        return name;
    }
    public int getImageId()
    {
        return imageId;
    }
}
2.新建一个布局页面(在layout文件夹下放入fruit_item.xml)其中加入一个imageView控件显示图片,再加入一个TextView显示名字
<ImageView
android:id="@+id/fruit_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/fruit_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
/>
3.自定义一个适配器类,此类继承ArrayAdapter并将此类的泛型指定为Fruit接受刚刚的Fruit类
public class FruitAdapter extends ArrayAdapter<Fruit>{
    private int resourceId;
    public FruitAdapter(Context context, int textViewResourceId, List<Fruit> objects)//重写了getView的方法可以将上下文,ListView的布局的id和数据传进来
    {
        super(context,textViewResourceId,objects);//就是这三个东西
        resourceId=textViewResourceId;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        Fruit fruit=getItem(position);//在每个子项被滚到屏幕内时调用这个方法,获取这个水果的实例
        View view= LayoutInflater.from(getContext()).inflate(resourceId,parent,false);//传入利用inflate传入布局此方法含有三个参数第三个参数指不让此布局在此界面中生效,
        ImageView fruitImage=(ImageView)view.findViewById(R.id.fruit_image);//在刚刚获取到的布局中,再获取listVIew和ImageView
        TextView fruitName=(TextView) view.findViewById(R.id.fruit_name);
     fruitImage.setImageResource(fruit.getImageId());//将图片和名字放入其中
     fruitName.setText(fruit.getName());
     return view;//返回布局
}
} 4.在主方法中写一个初始化Fruit类的函数传入各种数据
将适配器实例化传入三参
蒋listView实例化将适配器传入
private void initFruits() 5对于ListView的优化
1.对于滚动时不断调用getView()方法的优化
调用convertView方法来缓存布局
Fruit fruit=getItem(position);
View view;
if(convertView==null)
{
view=LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
}
else{
view=convertView;
}
判断ConverView是否为空,不空就直接重用,空的话就去加载布局
2.第二个优化,对于getView中的findViewById()方法重复调用,借助ViewHolder来优化
ViewHolder是一个内部定义的类将控件的实例都放在Viewholder里.并借用setTag()方法来放入View中,也就是所有的实例都保存在viewHolder中
定制ListView的界面(让列表中不仅有文字还有图片fruitImage.setImageResource(fruit.getImageId());)的更多相关文章
- android:定制 ListView 的界面
		
只能显示一段文本的 ListView 实在是太单调了,我们现在就来对 ListView 的界面进行 定制,让它可以显示更加丰富的内容. 首先需要准备好一组图片,分别对应上面提供的每一种水果,待会我们要 ...
 - android#定制ListView的界面
		
内容摘自<第一行代码>——郭霖 只能显示一段文本的ListView实在是太单调了,我们现在就来对ListView的界面进行定制,让它可以显示更加丰富的内容.首先需要准备好一组图片,分别对应 ...
 - Android—— ListView 的简单用法及定制ListView界面
		
一.ListView的简单用法 2. 训练目标 1) 掌握 ListView 控件的使用 2) 掌握 Adapter 桥梁的作用 实现步骤: 1)首先新建一个项目, 并让ADT 自动帮我们创建好活动. ...
 - 初识ListView - 定制ListView - 提升ListView运行效率
		
ListView绝对可以称得上是 Android 中最常用的控件之一,几乎所有的应用程序都会用到它.由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的 ...
 - ListView实现丰富的列表功能
		
ListView实现丰富的列表功能 1.主布局activity_main.xml <?xml version="1.0" encoding="utf-8" ...
 - WPF 显示文件列表中使用 ListBox 变到ListView 最后使用DataGrid
		
WPF 显示文件列表中使用 ListBox 变到ListView 最后使用DataGrid 故事背景: 需要检索某目录下文件,并列出来,提供选择和其他功能. 第一版需求: 列出文件供选择即可,代码如下 ...
 - 在滚动列表中实现视频的播放(ListView & RecyclerView)
		
英文原文:Implementing video playback in a scrolled list (ListView & RecyclerView) 本文将讲解如何在列表中实现视频播放. ...
 - android  在自定义的listview(有刷新加载项)列表中,数据过少时不能铺满整个屏幕时,header和footer同时显示问题
		
android 在自定义的listview(有刷新加载项)列表中,数据过少时,当刷新时,加载项也会显示,这是很头疼的一个问题,查阅了一些资料,总结了一个比较不错的方法: 原来代码: @Overrid ...
 - Android 在滚动列表中实现视频的播放(ListView & RecyclerView)
		
这片文章基于开源项目: VideoPlayerManager. 所有的代码和示例都在那里.本文将跳过许多东西.因此如果你要真正理解它是如何工作的,最好下载源码,并结合源代码一起阅读本文.但是即便是没有 ...
 
随机推荐
- 伪分布式下Hadoop3.2版本打不开localhost:50070,可以打开localhost:8088
			
一.问题描述 伪分布式下Hadoop3.2版本打不开localhost:50070,可以打开localhost:8088 二.解决办法 Hadoop3.2版本namenode的默认端口配置已经更改为9 ...
 - TCP层shutdown系统调用的实现分析
			
概述 shutdown系统调用在tcp层会调用两个函数,对于ESTABLISHED状态需要调用tcp_shutdown关闭连接,对于LISTEN和SYN_SENT状态则需要以非阻塞模式调用tcp_di ...
 - 【黑马JavaSE】1.1JavaSE、环境变量、CMD使用、常量、变量、数据类型转换(自动/强制)、ASCII码表、Unicode万国码表
			
文章目录 SUN公司,詹姆斯.劳瑟琳,Java祖师爷 Java语言开发环境搭建 把Java添加到环境变量的方法 命令行CMD里一些报的错误 命令控制行常用操作的代码展示 Notepad++.注释.标识 ...
 - redis如何清空当前缓存和所有缓存
			
Windows环境下使用命令行进行redis缓存清理1.redis安装目录下输入cmd2.redis-cli -p 端口号3.flushdb 清除当前数据库缓存4.flushall 清除 ...
 - WebSocket-nodejs实现
			
一.环境配置 1.下载安装nodejs https://nodejs.org/en/download/ 2.安装完成后打开cmd命令,执行node --version,看看是否安装成功,如果 ...
 - koa 基础(十)原生node.js 在 koa 中获取表单提交的数据
			
1.app.js // 引入模块 const Koa = require('koa'); const router = require('koa-router')(); /*引入是实例化路由 推荐*/ ...
 - SVN+MAVEN项目打包
			
题记:项目打包bash脚本 环境准备 maven版本:3.5.2 mvn -v #查看maven的版本信息 svn版本:1.4.0 svn --version #查看svn版本信息 1.update_ ...
 - 接入上一篇SSM框架整合示例
			
需要创建相应的包与文件夹 Book数据表作为本示例数据 搭建项目开始 首先有bean后 private int id; private String name; private int cnt; 第一 ...
 - Git代码行数统计命令
			
统计zhangsan在某个时间段内的git新增删除代码行数 git log --author=zhangsan--since=2018-01-01 --until=2019-04-01 --forma ...
 - 2019.11.18【每天学点SAP小知识】Day4 - ABAP 7.40新语法 FOR
			
"今天学习一下FOR的语法,常用的2个语法. FOR wa|<fs> IN itab [INDEX INTO idx] [cond] "FOR i = … [THEN ...