当我想要在listview上展示不同类型的数据的时候,就不能仅仅满足于使用一个简单的ArrayAdapter适配器了,这时,我就想要扩展Adapter的功能,自定义一个适配器继承自BaseAdapter,BaseAdapter有良好的扩充性能。例子如下:
现在.xml布局文件中添加listview控件,可以参考我上一篇文章。
我想在listview的每一个item中放入图片、文字等信息,所以新建一个.xml布局文件设计item,

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><ImageView
        android:id="@+id/img"android:layout_width="80dp"android:layout_height="120dp"android:layout_marginLeft="8dp"android:layout_marginTop="8dp"android:scaleType="centerCrop"android:src="@drawable/img0" /><Button
        android:id="@+id/btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBottom="@+id/img"android:layout_alignParentRight="true"android:text="购票" /><TextView
        android:id="@+id/tv3"android:layout_width="200dp"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/img"android:layout_marginTop="17dp"android:ellipsize="marquee"android:focusable="true"android:focusableInTouchMode="true"android:marqueeRepeatLimit="marquee_forever"android:padding="5dp"android:scrollHorizontally="true"android:singleLine="true"android:text="我是内容我是内容我是内容我是内容我是内容我是内容我是内容"/>//这里的文字有跑马灯效果<TextView
        android:id="@+id/tv1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignTop="@+id/img"android:layout_marginLeft="24dp"android:layout_toRightOf="@+id/img"android:text="电影名字"android:textSize="20sp" /><TextView
        android:id="@+id/tv2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_above="@+id/btn"android:layout_alignLeft="@+id/tv1"android:text="周星驰"android:textSize="20sp" />
</RelativeLayout>

我新建一个类Information放置我需要的变量的类型。


public class Information {String movie_name;String actor;int image;String introduce;}

接下来就可以实现我想要实现的功能了:

public class SecondActivity extends Activity implements OnItemClickListener,OnItemLongClickListener {ListView lv;/* 数据 */String[] movie_name = { "喜剧之王", "大话西游", "功夫", "逃学威龙", "大内密探零零发" };String[] actor = { "周星驰", "朱茵", "黄圣依", "吴孟达", "刘嘉玲" };int[] image = { R.drawable.img0, R.drawable.img1, R.drawable.img2,R.drawable.img3, R.drawable.img4 };String[] introduce = {"喜剧之王的介绍喜剧之王的介绍喜剧之王的介绍喜剧之王的介绍喜剧之王的介绍","故事发生在《大话西游》上一集《月光宝盒》之前500年。至尊宝被月光宝盒带回到五百年前,恰巧遇到紫霞仙子..."," 《功夫》(英语:Kung Fu Hustle)是一部于2004年上映的华语电影,由周星驰担任导演、编剧兼主演。片中包含了对武侠文化的敬仰、独特性与周星驰一贯的无厘头、夸张的搞笑风格..."," 周星星(周星驰 饰)是飞虎队队长,奉命以卧底的身份到圣育强中学寻找警司于参观时被窃的配枪。周星星就算百般无奈还是接受了任务...","《大内密探零零发》是一部拍摄于1996年的古装武侠外星科幻再加上无厘头的搞笑贺岁片电影..." };Myadapter myadapter = new Myadapter();List<Information> list = new ArrayList<Information>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);lv = (ListView) findViewById(R.id.lv);AddData();//调用AddData()函数/** LayoutInflater inflater = getLayoutInflater();//LayoutInflater布局加载类* View v = inflater.inflate(R.layout.item, null);* lv.addHeaderView(v);//在 这个组件的上方添加其他组件*/lv.setAdapter(myadapter);lv.setOnItemClickListener(this);lv.setOnItemLongClickListener(this);}private void AddData() {// TODO Auto-generated method stubint x = 0;for (int i = 0; i < 100; i++) {x = i % 5;Information info = new Information();info.actor = actor[x];info.image = image[x];info.introduce = introduce[x];info.movie_name = movie_name[x];list.add(info);}}class Myadapter extends BaseAdapter {@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}@Overridepublic long getItemId(int position) { // 返回指定索引项对应的数据项// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {/** 第一个参数表示该item在adapter的位置,第二个参数表示item的view对象,也就是滑动listview时显示的每个item* , listview有循环回收机制,会把每一个滑出界面的item返回 到回收站,第三个参数用来加载视图*/// TODO Auto-generated method stubLayoutInflater inflater = LayoutInflater.from(SecondActivity.this);View v = inflater.inflate(R.layout.item, null);ImageView img = (ImageView) v.findViewById(R.id.img);TextView tv1 = (TextView) v.findViewById(R.id.tv1);TextView tv2 = (TextView) v.findViewById(R.id.tv2);TextView tv3 = (TextView) v.findViewById(R.id.tv3);Information info = (Information) getItem(position);img.setImageResource(info.image);tv1.setText(info.movie_name);System.out.println("电影名结果是::" + info.movie_name);tv2.setText(info.actor);tv3.setText(info.introduce);**tv3.setSelected(true);// 为了设置跑马灯效果**return v;}}@Overridepublic boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {// TODO Auto-generated method stubToast.makeText(SecondActivity.this, "djjshj", Toast.LENGTH_SHORT).show();}

效果图如下:

有一些问题需要注意:

  1. Layoutinflater布局加载类,在item显示一个独立的布局文件时,需要用这个类加载这个布局,之后再做一系列的操作。
    LayoutInflater inflater = LayoutInflater.from(SecondActivity.this);
    View v = inflater.inflate(R.layout.item, null);
    还有一种方法:
    LayoutInflater inflater = getLayoutInflater();
    View v = inflater.inflate(R.layout.head, null);
  2. 我在item里加入了跑马灯效果,一般来说在.xml布局中设置好就可以显示效果了,在ListView的 Adapter里面,加上TextView.setSelected(true)

    关于list…

listview简单应用之BaseAdapter(二)相关推荐

  1. Android初学之七:ListView简单用法和ListView的界面定制

    一.ListView简单用法 1.首先在布局文件中加入ListView 2.展示一组String数据,修改MainActivity代码 二.ListView的界面定制 例子:条目样式为有一张图片和一个 ...

  2. Netty实现自定义简单的编解码器(二)

    2019独角兽企业重金招聘Python工程师标准>>> Netty实现自定义简单的编解码器(二) 关于编解码器请参见:http://my.oschina.net/xinxingege ...

  3. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  4. Nancy简单实战之NancyMusicStore(二):打造首页

    原文:Nancy简单实战之NancyMusicStore(二):打造首页 前言 继上一篇搭建好项目之后,我们在这一篇中将把我们NancyMusicStore的首页打造出来. 布局 开始首页之前,我们要 ...

  5. 动手造轮子:实现一个简单的依赖注入(二) --- 服务注册优化

    动手造轮子:实现一个简单的依赖注入(二) --- 服务注册优化 Intro 之前实现的那版依赖注入框架基本可用,但是感觉还是不够灵活,而且注册服务和解析服务在同一个地方感觉有点别扭,有点职责分离不够. ...

  6. 专属微信二维码python制作_如何利用Python制作简单的公众号二维码关注图

    创意配图:微信,微信公众号,微信大V 而且最近发现了一个新的图像处理方面的库-Wand,它是 ImageMagick 库的 Python 接口.于是,我就打算用这个库来实现简单的制作一个二维码关注图, ...

  7. [原创]linux简单之美(二)

    原文链接:linux简单之美(二) 我们在前一章中看到了如何仅仅用syscall做一些简单的事,现在我们看能不能直接调用C标准库中的函数快速做一些"复杂"的事: 1 section ...

  8. php自动发邮件系统,一个简单的自动发送邮件系统(二)_php基础

    一个简单的自动发送邮件系统(二)_php基础 发布时间:2016-06-17 来源: 点击: 次 这里介绍php和mysql结合起来实用. 基本上,可以说php是介于后台数据库和前台浏览器的一个中间层 ...

  9. 怎么做二维码更简单?这款二维码生成器了解一下

    很多小伙伴经常会需要将不同的内容做成二维码,比如视频.文件.文字等等多种类型,都会做成二维码来分享给他人使用.那么有一款简单好用的二维码生成器是非常重要的,下面就让小编来给大家分享一款免费的二维码制作 ...

最新文章

  1. 想象中的论文答辩和真实的论文答辩!哈哈哈哈哈哈……
  2. python语法错误概述_python语法错误
  3. 一个简单的socket程序-linux
  4. Spring Boot 2.4发布了,但 Spring Cloud 用户不推荐着急升级
  5. Dataset:fetch_20newsgroups(20类新闻文本)数据集的简介、安装、使用方法之详细攻略
  6. 内存扩展算法 linux,Linux下内存的使用率正确的算法
  7. openwrt开发环境搭建
  8. boost::signals2模块实现使用自动连接管理的测试程序
  9. P2742-二维凸包/圈奶牛Fencing the Cows【凸包】
  10. 代理的JavaOne 2016观察
  11. 使用工具连接linux中的mysql8.0
  12. 如何卸载zabbix且删除
  13. IPv4的路由选择计算步骤
  14. 大数据可视化平台有什么特点
  15. python3调用js_关于python3运行JS文件的问题
  16. Linux时间操作(time、gettimeofday)
  17. dem数据(dem数据格式)
  18. centos 打包某个目录_CentOS 打包压缩文件 zip 命令详解
  19. pycharm切换python环境_在PyCharm的 Terminal(终端)切换Python版本的方法
  20. ISO/IEC 9126 软件质量模型

热门文章

  1. TP-link WR841N无线路由器设置无线桥接(WDS功能)图文教程
  2. 查找行迁移及消除行迁移(chained rows)
  3. 服装ERP应用(13)-在服装行业困境之年的ERP应用
  4. 【19考研】复试英语 自我介绍模板
  5. [Shader]踩脚印
  6. Android 屏幕常亮
  7. 铅酸电池充放电保护电路图
  8. 利用Pyecharts绘制漏斗图的案例【含参数详解】
  9. E.Okabe and El Psy Kongroo
  10. of介词短语作定语_in和on的介词短语做后置定语的区别?