对于每一个android开发者而言,listview无疑是最常见的一个控件,打开手机应用,几乎所有app都会应用到listview,可以想象listview 到底有多重要,下面将对listview 进行详解。
android给我们提供的一些ArrayAdapter(文字),SimpleAdapter(文字和图片及其他),CursorAdapter(数据库数据)远远不够,我们可以都过自定义ListView去设置自己想要的效果。当然listview是通过适配器去将数据显示到视图中,适配器作为中间的一个桥梁。因此需要解决的关键性问题就是怎么去获取数据,怎么去显示数据。
1.ListView的控件对象
先在layout布局文件中定义listview控件

<ListView
        android:id="@+id/lv_main"android:layout_height="wrap_content"android:layout_width="fill_parent"/>

然后在MainActivity中获取到控件对象

//1. 获取ListView对象ListView listview = (ListView)findViewById(R.id.lv_main);

2.准备数据源
在我自己模拟了一些数据,这些数据以键值对的方式添加进入集合中。

//2. 准备数据源List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();Map<String,Object> map = new HashMap<String, Object>();map.put("logo", R.drawable.ic_10);map.put("title", "千千静听");map.put("version", "版本: 8.4.0");map.put("size", "大小: 32.81M");list.add(map);map = new HashMap<String, Object>();map.put("logo", R.drawable.ic_2);map.put("title", "时空猎人");map.put("version", "版本: 2.4.1");map.put("size", "大小: 84.24M");list.add(map);map = new HashMap<String, Object>();map.put("logo", R.drawable.ic_4);map.put("title", "360新闻");map.put("version", "版本: 6.2.0");map.put("size", "大小: 11.74M");list.add(map);map = new HashMap<String, Object>();map.put("logo", R.drawable.ic_15);map.put("title", "捕鱼达人2");map.put("version", "版本: 2.3.0");map.put("size", "大小: 45.53M");//将数据添加进集合list.add(map);

3.准备适配器
这里使用自定义适配器,把list集合和上下文通过构造器传入MyAdapter中。

MyAdapter adapter=new MyAdapter(this,list);

在这里新建一个MyAdapter.java,继承BaseAdapter,实现getCount,getItem,getItemId,getView这4个方法。当中的getView就解决了怎么去显示数据。重写这个方法

public class MyAdapter extends BaseAdapter{Context context;//list集合List<Map<String, Object>> list;//构造器public MyAdapter(Context context,List<Map<String, Object>> list){this.context= context;this.list = list;}
//传入数据集合public void setList(List<Map<String, Object>> list) {this.list = list;}@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;}public View getView(final int position, View convertView, ViewGroup arg2) {LayoutInflater inflater=LayoutInflater.from(context);View view=inflater.inflate(R.layout.item, null);ImageView logo=(ImageView) convertView.findViewById(R.id.logo);TextView title=(TextView) convertView.findViewById(R.id.title);TextView version=(TextView) convertView.findViewById(R.id.version);TextView size=(TextView) convertView.findViewById(R.id.size);Button btn=(Button) convertView.findViewById(R.id.btn);Map map=list.get(position);logo.setImageResource((Integer) map.get("logo"));title.setText((String) map.get("title"));version.setText((String) map.get("version"));size.setText((String) map.get("size"));return view;}}

这里需要将布局文件反射成一个View对象,新建布局文件为item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_marginLeft="5dp"android:layout_marginTop="5dp"android:layout_marginRight="5dp"android:gravity="center_vertical"android:padding="5dp"android:descendantFocusability="blocksDescendants"><!-- 用上面代码抢回焦点 --><ImageView
            android:id="@+id/logo"android:src="@drawable/ic_10"android:layout_width="70dp"android:layout_height="70dp"/><LinearLayout
            android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:layout_marginLeft="5dp"android:orientation="vertical"><TextView
                android:id="@+id/title"android:text="天天静听"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:layout_marginTop="2dp"/><TextView
                android:id="@+id/version"android:text="版本: 8.4.0"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="12sp"android:textColor="#999"android:layout_marginTop="6dp"/><TextView
                android:id="@+id/size"android:text="大小: 32.81M"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="12sp"android:textColor="#999"android:layout_marginTop="6dp"/></LinearLayout><Button
            android:id="@+id/btn"android:text="安装"android:textColor="#fff"android:textSize="14sp"android:layout_width="66dp"android:layout_height="30dp"android:background="@drawable/btn_selector"android:layout_marginRight="5dp"/>
</LinearLayout>

4.设置适配器

//4. 将适配器关联到ListViewlistview.setAdapter(adapter);```

最后这个小demo就完成了,放一下效果图

小插曲一下,如果出现listview点击事件没有反应的话,这是因为listview的焦点被button抢了,那么该怎么解决呢?先简单说2中方法解决。
(1)抢回焦点

android:descendantFocusability="blocksDescendants"

(2)设置button的属性

android:focusable="false"

listview,你不知道的事(后面附有listview的焦点问题)相关推荐

  1. android ListView详解,你不知道的事 (后附焦点解决方法)

    对于android开发者来说,ListView无疑是最为常见的一个控件之一,android系统给我们提供了一些ArrayAdapter(文字),SimpleAdapter(图文),CursorAdap ...

  2. python3.9.0 print_关于 Python 3.9,那些你不知道的事

    原标题:关于 Python 3.9,那些你不知道的事 作者 | Ayushi Rawat 编译 | 高卫华 题图 | 视觉中国 Python一直在满足社区需求,并且将成为未来使用最多的语言. Pyth ...

  3. android listview mapview,RelativeLayout和并列ListView/MapView

    我尝试使用RelativeLayout并排放置ListView和MapView.然而我的MapView总是高于ListView.RelativeLayout和并列ListView/MapView 这里 ...

  4. android listview 开发,android开发之ListView实现

    今天又初步学习了一下ListView控件,看看效果如下: LisViewActivity.java源码: package com.jinhoward.UI_listview; import java. ...

  5. android listview asynctask,关于android:ListView + ArrayList + AsyncTask

    本问题已经有最佳答案,请猛点这里访问. 我的想法是使用AsynTask下载数据集并存储在arrayList中. 我已经检查并运行良好. 在onPostExecute方法中,我调用一个函数来更新list ...

  6. 物联网通信技术,那些你不知道的事

    摘要:通信技术是物联网的基础,如果把物联网比作是物流系统,那么通信技术就相当于 是送快递的各种运输方式,比如空运.水运还有陆运等.在通信技术当中,大体上它可以分为两大类,一类是无线通信技术,另一类是有 ...

  7. android listview 增加单选 复选,ListView里面加入CheckBox如何实现单选?

    这个的问题也就是点击的时候 checkbox的选项会乱的问题 这个问题的解决很好解决,一个map或者实体类中加个字段就可以搞定.如果想彻底掌握也不麻烦,我这个人不太喜欢贴代码,谈谈原理仅作参考 了解l ...

  8. setTimeout,setInterval你不知道的事

    javascript线程解释(setTimeout,setInterval你不知道的事) 标签: javascript引擎任务浏览器functionxmlhttprequest 2011-11-21 ...

  9. 关于克隆猴中中华华的12点你不知道的事

    关于克隆猴-中中华华的几点你不知道的事 克隆猴的细胞来源是一只流产的母猴胎儿,也就是说,这只猴宝宝本来已经死了,但是它奇迹般的以2只克隆猴的形态复活了. 除了占满眼球的由胎儿细胞克隆成功的猴,还有1组 ...

最新文章

  1. [置顶]使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包...
  2. 数据库配置下拉框没有数据库可选
  3. Thundernet
  4. python【力扣LeetCode算法题库】69-x 的平方根
  5. 查看mysql是否繁忙_Oracle系统繁忙时,快速定位
  6. [置顶]       ibatis做分页
  7. Tencent Blade team荣获小米安全年度最佳守护者
  8. 为什么男性比女性死得更早,心疼一秒钟!
  9. C++中正确使用PRId64
  10. 字符串输出为什么第一个没了_「课堂笔记」Python基础语法:变量和输入输出
  11. 俞敏洪回应新东方股价跌破1美元
  12. 【iOS开发】在一个Xcode页面建立多个工程
  13. mysql 内存表 速度_mysql查询速度。为什么用内存表查询tmp表比直接选择慢?
  14. 目标检测综述——两阶段检测器
  15. 快速学会require的使用
  16. Visual Studio Code编辑器的实用插件和工作中实用的技巧
  17. 用递归调用函数来把存在父子级别的数据封装成一个树状结构
  18. 计算机无法识别ipad,ipad连接电脑没反应怎么办 ipad air连接电脑无法识别解决办法...
  19. Apple Watch发售在即 苹果门店大变脸
  20. 解密:股票短线起涨点的挂单玄机!

热门文章

  1. 两个Activity之间用接口回调进行通信
  2. iPhone手机移除锁屏密码的三大攻略分享
  3. python模拟微信登陆抢券
  4. 霍尼韦尔门禁说明书_Honeywell门禁系统简要操作说明.doc
  5. c语言int保留几位小数,C/C++保留小数位数
  6. open3d教程(二):可视化三维模型,并转换成点云(Python版本)
  7. 大数据研究的历史先驱:麦肯锡(McKinsey)
  8. 开篇 - 个人理财课程
  9. 微信公众号开发-----微信模板消息接口-----发送模板消息
  10. QtDesigner设计的界面适应高分辨率屏幕