跟我学Android之十一 列表和适配器
视频课:https://edu.csdn.net/course/play/7621
本章内容
第1节 列表类视图概述
第2节 列表视图ListView
第3节 下拉视图Spinner
本章目标
理解MVC模式的设计思想。了解AdapterView的继承关系图。掌握掌握使用各类适配器显示列表数据。掌握列表视图ListView的用法。掌握下拉视图Spinner的用法。
u主要用于展现一系列数据项供用户选择或浏览,比如:Ø收件箱中的邮件标题列表Ø通讯录中的联系人列表Ø注册用户时的城市选择列表uAndroid系统中提供了多种形式的列表展现Ø单选列表Ø多选列表Ø可展开列表
u用户前端界面与后端的数据分离uMVC设计模式的思想如下Ø视图模块负责显示用户界面和响应用户动作Ø模型模块负责管理维护数据Ø控制器负责执行业务逻辑
常用列表视图
ListView(列表视图)Spinner(下拉视图)GridView(网格视图)ExpandableListView(可展开的列表组件)
u适配器就是列表控件的模型Ø为列表控件提供数据Ø为列表项提供了显示视图
u定义了数据提供者的标准u提供了很多子类实现了多种数据的提供手段,常用的实现类如下ØArrayAdapter:简单、易用的Adapter.通常用于将数组或List集合的多个值包装成多个列表项。ØSimpleAdapter:并不简单、功能强大的Adapter。可用于将List集合的多个对象包装成多个列表项。ØBaseAdapter通常用于被扩展。扩展BaseAdapter可以对各列表项进行最大限度的定制。
uListView采用MVC模式将前端显示和后端数据进行了分离ØListView装载数据时并不使用ListView本身的方法Ø通过指定一个Adapter对象给ListView提供数据uListView显示效果如下
uItemSelected(列表项被选中时发生)Ø通过列表控件的setOnItemSelectedListener()实现监听uItemClick(单击列表项时发生)Ø通过列表控件的setOnItemClickListener()实现监听uItemLongClick(长按列表项时发生)Ø通过列表控件的setOnItemLongClickListener()实现监听
<ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:entries="@array/fruits"android:divider="#f00"android:dividerHeight="2px"android:headerDividersEnabled="false"/>
</LinearLayout>
<span style="font-size:14px;">String [] data = getResources().getStringArray(R.array.data);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, data);
</span>
Ø第二个参数表示为列表控件提供列表项的显示视图Ø第三个参数即为适配器所需要的数组数据u使用ArrayAdapter对象作为列表控件的数据源
<span style="font-size:14px;">ListView lv = (ListView)findViewById(R.id.listview);
lv.setAdapter(adapter);
</span>
<span style="font-size:14px;">final String[] arr1 = { "孙悟空", "猪八戒", "沙和尚" ,"白骨精"};
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, arr1);
list1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);// 为ListView设置Adapterlist1.setAdapter(adapter1);
</span>
SimpleAdapter概述
SimpleAdapter可以用于显示复杂数据uSimpleAdapter可以在列表的一项中提供和显示多个数据uSimpleAdapter需要自定义数据结构和显示视图布局uSimpleAdapter的构造需要5个参数Øcontext:为使用SimpleAdapter的上下文Ødata:为用于显示的具体数据l这是一个map对象的list,list中的每一项是一个maplmap中的每一项对应着列表项显示视图中的一个内容Øresource:用于显示具体数据的布局资源Øfrom:data数据中map所包含的每一个项中key的名字的数组Øto:map中的每一个key的内容所对应的显示视图的资源id的数组使用SimpleAdapter显示复杂数据需要设计好数据内容u不过视图如何复杂,列表的每一项内容由多个数据字段构成u在提供数据的时候,需要为每一个数据字段设计一个名字Ø字段名字和具体数据构成键值对,存放在map对象中
List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
for (int i = 0; i < names.length; i++)
{
Map<String, Object> listItem = new HashMap<String, Object>();listItem.put("header", imageIds[i]);listItem.put("personName", names[i]);listItem.put("desc", descs[i]);listItems.add(listItem);
}
u首先需要为复杂数据结构定义用于显示的列表项布局Ø布局文件:R.layout.simple_itemØ该文件包含一个头像ImageView,名字TextView,简介TextView
SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,R.layout.simple_item, new String[] { "personName", "header" , "desc"},new int[] { R.id.name, R.id.header , R.id.desc });
ListView list = (ListView) findViewById(R.id.mylist);
// 为ListView设置Adapter
list.setAdapter(simpleAdapter);
系统内置列表项
u布局基本都在android.R.layout中Øandroid.R.layout.simple_list_item_1Øandroid.R.layout.simple_list_item_2Øandroid.R.layout.simple_list_item_checkedØandroid.R.layout.simple_list_item_multiple_choiceØandroid.R.layout.simple_list_item_single_choice列表项的常见规划设计u在实际应用中,列表项显示设计往往是多种多样的u一些常见的设计效果如下:
u编写自定义适配器,选择继承android.widget.BaseAdapteru通常为适配器关联一个list,用于数据的提供u覆盖public int getCount()方法,用于告知列表有多少项数据
public int getCount() {return dataList.size();
}
View getView (int position, View convertView, ViewGroup parent)
public View getView(int position, View convertView, ViewGroup parent) {String ns = Context.LAYOUT_INFLATER_SERVICE;LayoutInflater li = (LayoutInflater)context.getSystemService(ns);View layout = li.inflate(R.layout.simple_item, null);TextView titleView = (TextView)layout.findViewById(R.id.title);TextView bodyView = (TextView)layout.findViewById(R.id.body);Mail m = dataList.get(position);titleView.setText(m.getTitle());bodyView.setText(m.getMessage());return layout;
}
public void addMail(Mail m) {dataList.add(m);notifyDataSetChanged();
}
uSpinner采用MVC模式将前端显示和后端数据进行了分离ØSpinner装载数据时并不使用Spinner本身的方法Ø通过指定一个Adapter对象给Spinner提供数据uSpinner显示效果如下
uSpinner相当于Android系统中的combobox(下拉选择框)uSpinner同样使用Adapter提供数据显示u在布局中使用<Spinner>标签布局
<Spinner android:id="@+id/spinner"android:layout_width="match_parent"android:layout_height="wrap_content" />
Spinner spinner = (Spinner)findViewById(R.id.spinner);
<string-array name="moviearray"><item>狮子王</item><item>丛林大冒险</item><item>米老鼠和唐老鸭</item><item>黑猫警长</item></string-array>
String [] data = getResources().getStringArray(R.array.moviearray);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, data);
s.setAdapter(adapter);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.spinner_item, p) {@Overridepublic View getDropDownView(int position, View convertView, ViewGroup parent) {View view = getLayoutInflater().inflate(R.layout.spinner_item, parent, false);TextView label = (TextView) view.findViewById(R.id.label);label.setText(getItem(position));if (spinner.getSelectedItemPosition() == position) {label.setTextColor(getResources().getColor(R.color.selected_fg));view.setBackgroundColor(getResources().getColor(R.color.selected_bg));view.findViewById(R.id.icon).setVisibility(View.VISIBLE);}return view;}
};
后一定要通知视图
跟我学Android之十一 列表和适配器相关推荐
- 处女男学Android(十一)---Gallery、ViewPager和ViewPager+Fragment实现的Tab导航
一.前言 转载请标明出处:http://blog.csdn.net/wlwlwlwl015/article/details/42087915 有阵子没更新博客了,主要是最近公司接了个P2P的金融借贷项 ...
- Carson带你学Android:全面解析列表ListView与AdapterView
前言 ListView在Android开发中十分常见 今天,我将为大家带来ListView与AdapterView全面解析,含其特点.工作原理等,希望你们会喜欢. Carson带你学Android系列 ...
- Android Studio 中列表视图(ListView)的应用
目录 引言 一.列表视图的作用 二.列表视图的工作原理和工作方式 三.准备数据源 四.适配器的使用 五.布局文件中的列表视图 六.自定义列表项布局 七.列表项点击事件处理 八.列表的优化 十.示例代码 ...
- turtle 函数 方法_学python第十一节:turtle深入 了解
学python第十一节:深入分析turtle Turtle是一个直观有趣的图形绘制函数. 这节课对turtle的以下几点进行补充: 在蟒蛇绘制代码中提到过import 库引用保留字的函数,是补充pyt ...
- 从零开始学android:Android中的基本控件(上)
从零开始学android:Android中的基本控件(上) 本章内容较多,下面只贴代码,大家只需要贴到自己eclipse里就知道作用^^! View组件简介 Android中的View组件包含了几乎所 ...
- com.android.kyj.onj,Android 自学之列表选择框Spinner
列表选择框(Spinner)与Swing编程里面的Spinner不同,这里的Spinner其实就是一个列表选项框. Spinner是ViewGroup的间接子类,因此他也可作为容器使用. Spinne ...
- android开发 RecyclerView 列表布局
android开发 RecyclerView 列表布局 前言 这是一个我早期学习的RecyclerView的博客,最近想整理一下它.后续会一点一点的再次添加内容. 导入 虽然RecyclerView是 ...
- 如何写出Android框架,结合android当前著名框架写的一个项目--学Android
简介 学Android 主要是采用 MVP + RxJava2 + Retrofit + Multimodule 等架构设计.利用开源的api获取有关android知识的数据,非常感谢张鸿洋老师提供的 ...
- 做了一个系列的Android开发教程列表
做了一个系列的Android开发教程列表.花了半天多的专题 里面包含了 4个系列的教程. 也包含了很多Android开发资料. 喜欢的人可以收藏哦:http://dev.apkbus.com/
最新文章
- HDU - 1269迷宫城堡 -强连通tanjar算法
- swift-初探webView与JS交互
- SQL Server 2008中的hierarchyid
- Git命令:常用Git命令集合
- java 读 jar外文件_读取Jar包外面的配置文件
- 面试官系统精讲Java源码及大厂真题 - 12 彰显细节:看集合源码对我们实际工作的帮助和应用
- 京东物流将收购德邦股份66.49%股份
- WPF中嵌套charts图表查询数据
- java中isa什么意思_ISA是什么?
- 【Shiro第一篇】 Shiro权限框架简介
- 解决卡米,安心卸载MIUI预装软件。
- js定义对象的多个属性值
- 线性系统理论3 状态空间描述 方框图
- 【CodeVS4093】EZ的间谍网络
- 在解压缩某些文件时出现问题检查计算机上,rar文件解压缩失败解压末端出现错误的解决方法...
- JS实现浏览器菜单命令
- 番茄工作法(番茄钟时间管理)
- 怎么将word转换成excel表格格式最简单
- (四)激活函数与loss梯度
- Zephyr驱动程序框架简介