listview,你不知道的事(后面附有listview的焦点问题)
对于每一个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的焦点问题)相关推荐
- android ListView详解,你不知道的事 (后附焦点解决方法)
对于android开发者来说,ListView无疑是最为常见的一个控件之一,android系统给我们提供了一些ArrayAdapter(文字),SimpleAdapter(图文),CursorAdap ...
- python3.9.0 print_关于 Python 3.9,那些你不知道的事
原标题:关于 Python 3.9,那些你不知道的事 作者 | Ayushi Rawat 编译 | 高卫华 题图 | 视觉中国 Python一直在满足社区需求,并且将成为未来使用最多的语言. Pyth ...
- android listview mapview,RelativeLayout和并列ListView/MapView
我尝试使用RelativeLayout并排放置ListView和MapView.然而我的MapView总是高于ListView.RelativeLayout和并列ListView/MapView 这里 ...
- android listview 开发,android开发之ListView实现
今天又初步学习了一下ListView控件,看看效果如下: LisViewActivity.java源码: package com.jinhoward.UI_listview; import java. ...
- android listview asynctask,关于android:ListView + ArrayList + AsyncTask
本问题已经有最佳答案,请猛点这里访问. 我的想法是使用AsynTask下载数据集并存储在arrayList中. 我已经检查并运行良好. 在onPostExecute方法中,我调用一个函数来更新list ...
- 物联网通信技术,那些你不知道的事
摘要:通信技术是物联网的基础,如果把物联网比作是物流系统,那么通信技术就相当于 是送快递的各种运输方式,比如空运.水运还有陆运等.在通信技术当中,大体上它可以分为两大类,一类是无线通信技术,另一类是有 ...
- android listview 增加单选 复选,ListView里面加入CheckBox如何实现单选?
这个的问题也就是点击的时候 checkbox的选项会乱的问题 这个问题的解决很好解决,一个map或者实体类中加个字段就可以搞定.如果想彻底掌握也不麻烦,我这个人不太喜欢贴代码,谈谈原理仅作参考 了解l ...
- setTimeout,setInterval你不知道的事
javascript线程解释(setTimeout,setInterval你不知道的事) 标签: javascript引擎任务浏览器functionxmlhttprequest 2011-11-21 ...
- 关于克隆猴中中华华的12点你不知道的事
关于克隆猴-中中华华的几点你不知道的事 克隆猴的细胞来源是一只流产的母猴胎儿,也就是说,这只猴宝宝本来已经死了,但是它奇迹般的以2只克隆猴的形态复活了. 除了占满眼球的由胎儿细胞克隆成功的猴,还有1组 ...
最新文章
- [置顶]使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包...
- 数据库配置下拉框没有数据库可选
- Thundernet
- python【力扣LeetCode算法题库】69-x 的平方根
- 查看mysql是否繁忙_Oracle系统繁忙时,快速定位
- [置顶] ibatis做分页
- Tencent Blade team荣获小米安全年度最佳守护者
- 为什么男性比女性死得更早,心疼一秒钟!
- C++中正确使用PRId64
- 字符串输出为什么第一个没了_「课堂笔记」Python基础语法:变量和输入输出
- 俞敏洪回应新东方股价跌破1美元
- 【iOS开发】在一个Xcode页面建立多个工程
- mysql 内存表 速度_mysql查询速度。为什么用内存表查询tmp表比直接选择慢?
- 目标检测综述——两阶段检测器
- 快速学会require的使用
- Visual Studio Code编辑器的实用插件和工作中实用的技巧
- 用递归调用函数来把存在父子级别的数据封装成一个树状结构
- 计算机无法识别ipad,ipad连接电脑没反应怎么办 ipad air连接电脑无法识别解决办法...
- Apple Watch发售在即 苹果门店大变脸
- 解密:股票短线起涨点的挂单玄机!