导图社区 ListView架构数据处理特点笔记
给ListView设置数据 3.1 找到控件 在项目的src 文件夹中的包下,找到并打开MainActivity.Java 文件,然后在onCreate 方...
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
ListView架构数据处理特点笔记
特点
适配器
多项内容放入一个列表
适配器控件
包含多项相同格式资源的列表
数据源
list<Map<String,Object>> maps
适配器对象
给适配器控件提供数据的对象
MVC模式
Model:供数据的List或数组
视图View
ListView
Control
Adapter对象
listView添加数据
不能直接add\put
通过Adapter对象添加
框架结构
继承父类ViewGroup
AdapterView
AbsListView单层
列表
GridView
(网格图)
AbsSpinner多层
Spinner
(下拉列表)
Gallery
(图片选择器)
结构
共同继承baseAdapter(类)
实现接口
ListAdapter
SpinnerAdapter
Adapter总结口
子类
SampleAdapter
ArrayAdapter
自定义Adapter
简单xml中加入数据
1、创建xml
添加内容
2、ListView中添加entries="@array/names"
数据处理
删除数据
onItemLongClick(AdapterView<?> parent, View view,int position, long id)
用数据源对象删除
data.remove(position);
使用适配器对象
adapter.remove(name)
String name = adapter.getItem(position).toString();
adapter.notifyDataSetChanged();
刷新
用户点击事件获取数据对象
1、根据数据源
data.get(position);
2、根据适配器对象
adapter.getItem(position);
3、根据适配器控件
parent.getItemAtPosition(position).toString()
4、根据参数view对象
String name = ((TextView)view).getText().toString().trim();
数据为空时显示的控件对象
this.listView_names.setEmptyView(this.textView_empty);
textView_empty.xml
初始化数据
使用字符串数组
布局文件
字符串数组
设置ArrayAdapter
使用XML为数据来源
在values/strings.xml中
最简单的Adapter,text
1、设置布局
main中添加一个listview
item,设置子控件
声明ListView控件对象、适配器 、 List<x> data
初始化控件this.init()
注册点击ListView中某一个条目时的监听器对象
setOnItemClickListener(new OnItemClickListener()
parent 事件源(ListView)\
view 用户点击的ListView中的条目对应的view对象
position 当前条目在ListView中的索引位
id 当前条目对于的行号,一般和position相等
长按ListView中某一个条目
setOnItemLongClickListener(new OnItemLongClickListener())
自定义getAdapter方法得到适配器对象
在getAdapter中自定义data的方法
this.data=getData();
SimpleAdapter
每一个列表项中含有不同的子控件
声明
ListView对象
private ListView listView_person;
声明数据源对象
private List<Map<String,Object>> data;
声明简单适配器对象
private SimpleAdapter adapter;
初始化控件
自定义this.init()
获取数据源对象
1.利用类似变量名地址相差1的规律获取图片地址
放在drwable
R.java
for() map.put()
2.使用反射获取图片的地址
1.得到drawable类的类型对象
Class cls=R.drawable.class;
2.得到cls类中的所有字段的集合
Field[] fields=cls.getDeclaredFields();
for(int i=0;i<len;i++)
Map<String,Object> map=new HashMap<String, Object>();
3.根据索引位得到字段对象
Field field=fields[i];
4.得到字段的字段名称
String fieldName=field.getName();
if(fieldName.startsWith("png_")){
5.根据字段对象传入对象获取字段的值
获得适配器对象
设置适配器参数
注册点击条目监听器对象
单击
长按
自定义myAdapter
动态数据
1\
声明、初始化
返回自定义适配器对象
自定义获得数据源
实现自定义适配器
1.编写类继承BaseAdapter或者它的子类
2.重写四个方法
getCount(),
返回数据源中数据的条目数
return data.size();
public Object getItem(int position)
根据索引位返回数据对象
return data.get(position);
public long getItemId(int position)
根据索引位返回行号
return position;
public View getView(int position, View convertView, ViewGroup parent) {
getView方法调用绘制条目时
ListView的高度匹配父窗口
返回view对象用于显示到屏幕
屏幕能够显示多少个条目,那么getView()就会被调用多少次
实例化布局填充器
缓存优化:
1.重用移除去的条目
Recycler(反复循环器)
只需要设定新的数据返回convertView
2.将布局对象中的控件进行了缓存,下次使用减少了查找的时间
自定义view缓存各个控件的对象
将viewHolder对象和view对象进行绑定
setTag()\getTag()