时间:2015-01-07 来源:

Android笔记十一.ListView+Adapter 【编程语言】

深入理解Adapter
一、ListView
    ListView是Android开发过程中较为常见的组件之一网页外包接活,它将数据以列表的形式展现出来.一般而言,网页外包接活通常是一个xml所指定的.大家都知道Android的界面基本上是由xml文件负责完成的,div+css制作所以ListView的界面也理所应当的使用了xml定义.例如在ListView中经常用到的“android.R.layout.simple_list_item_1”等,div+css报价 就是Android系统内部定义好的一个xml文件.
2.Adapter适配器:用于将不同的数据映射到View上.不同的数据对应不同的适配器,兼职手机网页制作 SimpleAdapter等,psd转html指针指向的数据,Map等数据或基本组件映射到View上.也正是由于适配器的存在,网页外包接活使得ListView的使用相当灵活web前端制作,经过适配器的处理后,web前端制作在 view看来所有的数据映射过来都是一样的.
3.数据:具体的数据和资源.可以是字符串图片、Map映射等承接网页制作,通过适配器这些数据将会被现实到 ListView上.
    总之,div前端切图所有的数据和资源要显示到ListView上都通过适配器来完成.ArrayAdapter, SimpleAdapter为系统已有的适配器符合w3c标准,可以将如数组、Cursor指向的数据(一般为数据库)、Map里的数据.

二、深入理解Adapter
1.概要:Adapter是连接后端数据和前端视图显示的适配器接口,符合w3c标准是数据和UI(View)之间的桥梁.通过适配器网页外包接活,可以将不同的数据映射并显示到View上.在常见的View(ListView、GridView)等地方都需要用到Adapter.对于Data、Adapter、View的关系,jpg或psd转html如下图所示:
2.Android中Adapter类
(1)BaseAdapter适配器为一个抽象类,使用该类可以实现更为复杂的ListView.通过文档可以看出,web前端制作ArrayAdapter, SimpleAdapter都继承于BaseAdapter.所以通过继承BaseAdapter就可以完成自己的Adapter,可以将任何复杂组合的数据和资源,网站div+css以任何你想要的显示效果展示处理.继承BaseAdapter之后符合w3c标准,getItem,getView.但是web前端制作,CursorAdapter, SimpleAdapter则无须要全部重写上述四种方法.
(2)ArrayAdapter适配器支持泛型操作,兼职手机网页制作最为简单web切图报价,只能展示一行字符串.
(3)SimpleAdapter适配器有最好的扩充性,web切图报价可以自定义出各种效果(字符串、图片、Map集),它需要Cursor的字段和UI的id对应起来.如需要实现更复杂的UI也可以重写其他方法.可以认为是SimpleAdapter对数据库的简单结网页外包接活,可以方便地把数据库的内容以列表的形式展示出来.

3.ListView加载adapter一般过程
(1)先判断adapter有多少数据项,网页外包接活根据这个数据确定有多少item(列表项). -----getCount()方法实现 
(2)确定每个item里加载哪个View.                                     -----getView()方法实现
(3)向对应的View中加载需要显示的数据
4.ArrayAdapter实例分析
(1)开发基本思路
    ArrayAdapter适配器支持泛型操作web前端制作,列表的每一项只能显示一串字符,web前端制作不能显示图片等资源数据.
*使用字符串数组作为数据源
a.实现一个字符串数组作为数据源(List集)(数组元素有几个承接网页制作,就有几个列表项)
b.实例化一个ArrayAdapter<String> 适配器对象,div前端切图用于装配数据源到指定的View.
ArrayAdapter<String> adapter=new ArrayAdapter<String>( this, strs); 
c.将ArrayAdapter适用于ListActivity的ListView
setListAdapter(adapter);
*使用List集合(ArrayList)作为数据源
a.实例化一个ListView对象
b.实例化一个ArrayAdapter<String>对象(集合中数据项类型为String), android.R.layout.simple_expandable_list_item_1,"第二项","第四项"}; //列表项数据
      ArrayAdapter<String> adapter=new ArrayAdapter<String>(  //实例化一个ArrayAdapter适配器来装配数据
            this, //列表的每一行布局web切图报价, int textViewResourceId,要装配这些数据就需要一个连接ListView视图对象和数组数据的适配器来两者的适配工作网页外包接活,ArrayAdapter的构造需要三个参数,网页外包接活依次为this,android.R.layout.simple_list_item_1是系统定义好的布局文件只显示一行文字承接网页制作, //实例化一个适配器adapter
         android.R.layout.simple_expandable_list_item_1, //布局文件:显示一行文字
         getData()); //获取数据源(ArrayList集合)
  listview.setAdapter(adapter); //装配Adapter到ListView
  setContentView(listview); //将list视图显示
 
 }
 private List<String> getData() {
  // TODO Auto-generated method stub
  List<String> data=new ArrayList<String>(); //实例化一个ArrayList集合,web切图报价用于装载数据
  data.add("测试数据1"); //向ArrayList集合中添加元素数据
  data.add("测试数据2");
  data.add("测试数据3");
  data.add("测试数据4");
  return data; //返回ArrayList集合对象
 }
}
分析:
(1) getData()
(2) List<String> 
(3) List<String> data=new ArrayList<String>()
效果:

5.SimpleAdapter实例分析
   与ArrayAdapter不同的是符合w3c标准,simpleAdapter的扩展性最好,html切图制作可以定义各种各样的布局出来网页外包接活,还可以放上Button(按钮),CheckBox(复选框)等等.一般情况下,web前端制作我们都是利用Map哈希表作为数据源承接网页制作,通过键到组件Id的映射实现列表项内容.
(1)开发基本思路
a.装配适配器,div前端切图将Map键数据资源映射到Id所对应的组件上;
 SimpleAdapter adapter =new SimpleAdapter(this, //获取list数据集
            R.layout.simple,"title1", //Map集合键
            new int[]{R.id.img,R.id.info});//界面组件Id
b.实现一个Map集合承接网页制作,Object>> list=new ArrayList<Map<String,Object>>(); //实例化一个ArrayList对象,网站div+css
 Map<String,Object>(); //设置列表第一项标题与图标(使用Map)
c.ArrayAdapter适用于ListActivity的ListView
 setListAdapter(adapter);
(2)源代码分析
SimpleAdapterActivity.java
package com.example.android_sampleadapter_1;
import java.util.ArrayList; 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.ListActivity; 
import android.os.Bundle;
import android.widget.SimpleAdapter;
public class SimpleAdapterActivity extends ListActivity { 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
 //1.装配适配器网页外包接活, //上下文
            getData(), //指定布局文件
            new String[]{"img","info"},R.id.title1,list的每一节对应ListView的每一行
  //HashMap的每个键值数据映射到布局文件中对应id的组件上
 private List<Map<String,Object>> list=new ArrayList<Map<String,Object>>(); //实例化一个ArrayList对象,web前端制作
  Map<String,Object>(); //设置列表第一项标题与图标(使用Map)
  map.put("img", "华为荣耀");
  map.put("info", "学人家玩抢购,符合w3c标准真TM坑爹!");
  list.add(map); //将一个map对象添加到列表中
 
  map=new HashMap<String, R.drawable.b);
  map.put("title1", "god knows");
  list.add(map); //将一个map对象添加到列表中
 
  map=new HashMap<String, R.drawable.c);
  map.put("title1", "手机还不错符合w3c标准,Object>();
  map.put("img", "魅族4");
  map.put("info",list的每一节对应ListView的每一行.HashMap的每个键值数据映射到布局文件中对应id的组件上.因为系统没有对应的布局文件可用承接网页制作,我们可以自己定义一个布局simple.xml.下面做适配,兼职手机网页制作new一个SimpleAdapter参数一次是:this,HashMap的 title 和 info,布局文件的组件id,info,img.布局文件的各组件分别映射到HashMap的各元素上,web前端制作完成适配.
simple.xml-列表项布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android
xmlns:tools="http://schemas.android.com/tools
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<ImageView 
android:id="@+id/img" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_margin="10dp"/> 
<LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"> 
<TextView 
android:id="@+id/title1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textColor="#FF000000" android:textSize="22sp"/> 
<TextView 
android:id="@+id/info" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textColor="#FF000000" android:textSize="13sp"/> 
</LinearLayout> 
</LinearLayout> 

6.SimpleAdapter实例分析
package com.example.android_simplecuroradapter;
import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.support.v4.widget.SimpleCursorAdapter;
import android.widget.ListAdapter;
public class SimpleCursorActivity extends ListActivity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  //1.获得一个指向系统通讯录数据库的CurSor对象获得数据来源
  Cursor cur=getContentResolver().query(People.CONTENT_URI, null, null);
  startManagingCursor(cur);
  //2.实例化列表适配器
  ListAdapter adapter=new SimpleCursorAdapter(this,cur,new int[] {android.R.id.text1});
  //3.显示视图
  setListAdapter(adapter);
 }
}
分析:
    一定要以数据库作为数据源的时候web前端制作,这里特别需要注意的一点是:不要忘了在AndroidManifest.xml文件中加入权限
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
效果:

参考:
1.http://www.cnblogs.com/Gaojiecai/archive/2012/10/08/2715962.html
2.http://wenku.baidu.com/link?url=1ln6lAvzN9E-1eOuEfy2E_i1O0Ws8gE0KcySX-yu-j7wEzgd1EkuDhwcfeCcM48egMIFb-Egm7mh1RODs9hkXw8C1zjqNkIa4lyvH5oliHO
3.http://wenku.baidu.com/view/0224ead8ad51f01dc281f141.html



点击次数:11652
作者:

其它web前端开发资讯

pscs6制作gif动画教程:手写字特效2018年01月20日狗刨学习网谈如何做好游戏制作人 【移动开发】2018年01月20日通过图片叠加制作绚丽的花朵照片2018年01月20日牛腩新闻发布系统——盒子的浮动与定位【综合】2018年01月20日HDU1561Themore,TheBetter(树形dp+背包) 【编程语言】2018年01月20日ruby和linuxshell共同编程的示例 【Web前端】2018年01月20日MAVEN:Failuretotransferorg.codehaus.plexus:plexus-io:jar:2.4.1 【编程语言】2018年01月20日【iOS开发系列】延时执行的几种方式 【移动开发】2018年01月20日Linux查看用于终止进程命令 【综合】2018年01月20日phpsocket处理不过来数据流,该如何避免(好像是阻塞了)【编程语言】2018年01月20日AndroidStudio开发Groovy 【互联网】2018年01月20日果壳智能圆表获“光芒体验大奖”2018年01月20日BZOJ1941Sdoi2010HideandSeekK-Dimensional-Tree 【移动开发】2018年01月20日C++笔记--建立头文件与源文件 【移动开发】2018年01月20日Sicily1901.Beans【编程语言】2018年01月20日OracleAPEXinstallationwithORDS【数据库】2018年01月20日
web前端行业资讯
Web new NewsList
微软发布WindowsServerBuild17074更新 ,,2018年01月18日凭借一个AI小功能,这款Google应用冲上苹果AppStore榜首 ,,2018年01月18日百度数据可视化实验室正式成立,发布深度学习可视化平台VisualDL ,,2018年01月18日OpenAI开源最新工具包,模型增大10倍只需额外增加20%计算时间 ,,2018年01月18日百度手机输入法8.0正式发布:支持多人语音速记 ,,2018年01月18日CSDN宣布收购TinyMind团队并升级为AI社区 ,,2018年01月18日甲骨文发布补丁修复英特尔芯片漏洞造成的问题 ,,2018年01月18日权威!官方发布CPU熔断和幽灵漏洞防范指引:附补丁下载 ,,2018年01月18日Oracle宣布新的JavaChampions ,,2018年01月18日腾讯加码区块链项目已悄然注册“以太锁”商标 ,,2018年01月18日Fedora28壁纸征集活动现已开幕:将持续至2月13日 ,,2018年01月18日苹果WebKit团队发布Speedometer2.0网页响应测试工具 ,,2018年01月18日百度输入法8.0后天发布:全感官AI输入 ,,2018年01月18日腾讯和乐高合作:共同研发智能玩具、游戏 ,,2018年01月18日HomePod上市日益临近智能音箱市场吸引力越来越大 ,,2018年01月18日3D打印脑组织?科学家正在向这一目标正在前进 ,,2018年01月18日英特尔公布修补漏洞后PC性能数据:8代CPU影响最小 ,,2018年01月18日云存储公司Dropbox秘密提交IPO申请估值超百亿美元 ,,2018年01月18日iPod之父:防手机上瘾无技术难度苹果谷歌应承担责任 ,,2018年01月18日芯片不安全英特尔云客户考虑转用AMD等对手处理器 ,,2018年01月18日2018年Java展望 ,,2018年01月18日区块链有多火?快播流量矿石遭20多万人疯抢 ,,2018年01月18日Intel搞定神经拟态芯片:模拟人类大脑、自主学习 ,,2018年01月18日阿里巴巴发布IoTConnect开放连接协议,盼推动语音互动入口普及 ,,2018年01月18日区块链火了,全球大佬们怎么看? ,,2018年01月18日Facebook正测试新功能主推本地新闻资讯 ,,2018年01月18日在GooglePlay中发现使用Kotlin开发的安卓恶意软件 ,,2018年01月18日VisualStudio201715.6预览版本2,增加新功能 ,,2018年01月18日百度陆奇:AI是5G最好的加速器 ,,2018年01月18日PinterestCEO:不同于谷歌和Facebook,我们走了第三条路 ,,2018年01月18日PHP进程锁定问题分析研究2014年01月29日存储器问题 【云计算】2015年05月05日设计模式C++实现十五:组合模式 【编程语言】2015年05月15日Spring揭秘读书笔记五容器的启动 【移动开发】2015年08月25日iOS让tableView选中固定行 【综合】2015年08月24日五板斧封杀Windows默认共享2014年01月29日【机器学习实验】用Python进行机器学习实验 【系统运维】2015年03月13日苹果CEO库克:中国以最快增速成为第二大市场 ,,2016年06月29日Java8中时间日期库的20个常用使用示例 【架构设计】2015年03月19日Windows8的进化 ,,2016年06月23日Android-错误:Unabletoinstantiateapplication 【Web前端】2014年11月24日PHPExtension开发(Zephir版本)【编程语言】2015年02月11日oracle删除重复数据2014年01月30日IOSblock编程指南2block开始 【移动开发】2015年03月17日Java-ExcelSheetColumnNumber 【编程语言】2015年01月12日PHP开源内容管理系统Redaxscript ,,2016年06月23日hive函数----集合统计函数 【综合】2015年05月28日php输出echo、print、print_r、printf、sprintf、var_dump的区别比较2014年01月29日uva--993Productofdigits 【编程语言】2014年11月26日腾讯夺得2017中国上市公司品牌价值榜桂冠 ,,2017年04月06日HDU吃糖果【编程语言】2015年05月27日Android开发--常用的传感器总结 【综合】2015年02月04日【CC++学院】(4)c++开篇类和对象命名空间类型增强三目运算符const专题引用专题函数增强【Web前端】2015年01月24日数据挖掘十大算法——NaiveBayes 【架构设计】2015年08月14日MajorityElement【数据库】2015年03月26日【Python3之异常处理】2017年06月28日使Decimal类型数据保留N位小数且不进行四舍五入操作(C#) 【编程语言】2014年11月04日浅谈linux操作系统的优化及安全2014年01月29日asp最简单最实用的计数器2014年01月29日IT学术交流盛会,你不容错过! 【编程语言】2015年04月13日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)