使用
a. ArrayAdapter :显示简单文本列表
ArrayAdapter(Context context, int resource,T[] objects)
b. simpleAdpater :显示复杂列表
SimpleAdapter(Context context, List<? extends Map<String, ?>> data,int resource, String[] from, int[] to) {
.BaseAdpater (抽象的):显示复杂列表
int getCount() :得到集合数据的个数,决定了能显示多少行
0bject getI tem(int position) :根据position得到对应的数据对象
View getVi ew(int posi tion, Vi ew convertView,Vi ewGroup parent)
//根据posi tion返回对应的带数据的Item视图对象
position :下标
convertView :可复用的Item视图对象
为null :没有可复用的,我们必须加载一个item的布局文件,并赋值给convertView
不为mull:直接使用此视图对象
后面:找到子View,找到对应的数
据,设置数据
parent : ListVi ew
d.给ListView 的Item设置监听
item的点击监听:
listView. setOnI terC1 ickListener(listener)
item的长按监
听: listVi ew. setOnI tend ongCli ckListener (1 istener)
3).优化
第0层:不优化:
每次执行getViewO,都会执行: converterView =Vi ew. inflate(R. layout. xx);
问题:效率太低,在快速滑动时会有卡顿,在数据很多时甚至会内存溢出
第1层:复用converterView
if(converterView==null)
converterView = View. inflate(R. layout. xxx); //n+1
问题:每次执行getView()都需要执行converterView. findViewByIdO得到子View
3).优化
第0层:不优化:
每次执行getView(),都会执行:
conyerterView
View. inflate(R. layout. xxx);
问题:效率太低,在快速滑动时会有卡顿,在数据很多时甚至会内存
溢出
第1层:复用
converterView
if(converterView==nul1) {
converterView = View. inflate (R. layout. xxx); //n+1}
问题:每次执行getVi ew()都需要执行converterVi ew. findViewByIdO
得到子View
第2层:使用Viellolder,减少findVi ewById0的次数
Viewholder holder = nu11;if (converterView==null) {
converterView = View. inflate(R. layout. xxx);holder = new ViewHolderO;holder. imageView =
(ImageView) converterVi照findViewByIdxx);
holder. textVi ew
(TextView) converterView. findVi ewByIdwxx)
converterVi ew. setTag (holder);else
holder = (Viewholder )converterView. getTagO;
Person p = data. get (positi on);
holder. imageView. setImageResource (p. getIcon0);hol der. textView. setText (p. getName0);
static class ViewHolder {
ImageView imageView;
TextView textView; I
一
//json: [0,
0]
问题1:对于联网获取列表数据,如果数据量太大(比如超过00000条
甚至更多),一次获取出来显示,太慢太耗流量:第四层优化
问题2:
对于联网获取列表数据,如果包含图片数据,每次都请求获
取显示,
太慢太耗流量:第三层优化
第3层优化:图片三级缓存处理(LRU)
1).内存缓存优先加载,速度最快2).本地缓存次优先加载,速度稍快
3).网络缓存最后加载,速度由网络速度决定(浪费流量)
第4层:对数据列表进行分页加载显示
1). 自己做:通过Scroll监听
listView setonSecrollistener (scolllistener),当到达底部时加载下一页列表数据并显示
2).使用第三方开源框架: Android-PulToRefresh 或其它
6. style和Theme
1). style[: 多个视图标签属性的集合
好处:
复用标签属性
目标:布局文件中的视图标签|
2). theme :本质也是style
好处:
复用标签属性
目标:
功能清单文件中整个应用/Activity
7.练习
1).应用功能编码的基本流程
外观:
布局文件,读取数据,定义Adapter,显
示列表
行为:设置事件监听,并在回调就去中做出对应的
响应
2).初始显示列表和更新列表
3). GridView的基本使用
3.常用的UI布局
1). LinearLayout:线性布局
用来控制其子View以水平或垂直方式展开显示2). RelativeLayout: 相对布局
用来控制其子View以相对定位的方式进行布局显示3). FrameLayout: 帧布局
I每一个子View都代表一个画面, 后面出现的会覆盖前面的
画面
通过子View的android:1 ayout_ gravity属性来指定子视图的位置
3.常用的UI布局
1). LinearLayout:线性布局
用来控制其子View以水平或垂直方式展开显示2). RelativeLayout: 相对布局
用来控制其子View以相对定位的方式进行布局显示3). FrameLayout: 帧布局
I每一个子View都代表一个画面, 后面出现的会覆盖前面的
画面
通过子View的android:1 ayout_ gravity属性来指定子视图的位置
内边距属性
android:padding
android:paddingLeftandroid:paddingTopandroid:paddingRightandroid:paddingBottom外边距属性
android:layout ]margin
android:layout marginLefandroid:layout marginTop
antispid:layout marginRightandroid:layout marginBottom
2).只针对 RelativeLayout
相对兄弟视图定位
同方向对齐属性
android:layout. alignLeftandroid;layout alignTopandroid:Bsout alignRightandroid:layout alignBottom
反方向对齐属性
android:layout toleftOfandroid:layout toRightOfandroid:layout aboveandroid:layout below
3).只针对LinearLayout
wrientation(方向)layout weight(权重)
layout_ weight( 权重)的值
=0(默认值):指定多大空间就占据多大的空间
>0:将父视图中的可用空间进行分割,值越大权重就越大,占据的比例就会越大
Layout_ weight的使用场景
将布局的宽度或高度平均分成几个等份
垂直方向上占用中间所有空间或水平方向上占用中间所有空间
5. ListView的使用
1).理解
ListView是-稗用来星示多↑可滑功項(Item)列表的的ViewGroup需要使用Adapter将集合数据和毎一个ltem所対座的布局劫恣遁配到ListView中豆示一
温示列表: listView.setAdapter(adapter)更新列表: adapter,notifyDataSetChanged()
Data
Adapter ListView
Item Layout
2018/5/15 20:29:42
a. ArrayAdapter :显示简单文本列表
ArrayAdapter(Context context, int resource,T[] objects)
b. simpleAdpater :显示复杂列表
SimpleAdapter(Context context, List<? extends Map<String, ?>> data,int resource, String[] from, int[] to) {
.BaseAdpater (抽象的):显示复杂列表
int getCount() :得到集合数据的个数,决定了能显示多少行
0bject getI tem(int position) :根据position得到对应的数据对象
View getVi ew(int posi tion, Vi ew convertView,Vi ewGroup parent)
//根据posi tion返回对应的带数据的Item视图对象
position :下标
convertView :可复用的Item视图对象
为null :没有可复用的,我们必须加载一个item的布局文件,并赋值给convertView
不为mull:直接使用此视图对象
后面:找到子View,找到对应的数
据,设置数据
parent : ListVi ew
d.给ListView 的Item设置监听
item的点击监听:
listView. setOnI terC1 ickListener(listener)
item的长按监
听: listVi ew. setOnI tend ongCli ckListener (1 istener)
3).优化
第0层:不优化:
每次执行getViewO,都会执行: converterView =Vi ew. inflate(R. layout. xx);
问题:效率太低,在快速滑动时会有卡顿,在数据很多时甚至会内存溢出
第1层:复用converterView
if(converterView==null)
converterView = View. inflate(R. layout. xxx); //n+1
问题:每次执行getView()都需要执行converterView. findViewByIdO得到子View
3).优化
第0层:不优化:
每次执行getView(),都会执行:
conyerterView
View. inflate(R. layout. xxx);
问题:效率太低,在快速滑动时会有卡顿,在数据很多时甚至会内存
溢出
第1层:复用
converterView
if(converterView==nul1) {
converterView = View. inflate (R. layout. xxx); //n+1}
问题:每次执行getVi ew()都需要执行converterVi ew. findViewByIdO
得到子View
第2层:使用Viellolder,减少findVi ewById0的次数
Viewholder holder = nu11;if (converterView==null) {
converterView = View. inflate(R. layout. xxx);holder = new ViewHolderO;holder. imageView =
(ImageView) converterVi照findViewByIdxx);
holder. textVi ew
(TextView) converterView. findVi ewByIdwxx)
converterVi ew. setTag (holder);else
holder = (Viewholder )converterView. getTagO;
Person p = data. get (positi on);
holder. imageView. setImageResource (p. getIcon0);hol der. textView. setText (p. getName0);
static class ViewHolder {
ImageView imageView;
TextView textView; I
一
//json: [0,
0]
问题1:对于联网获取列表数据,如果数据量太大(比如超过00000条
甚至更多),一次获取出来显示,太慢太耗流量:第四层优化
问题2:
对于联网获取列表数据,如果包含图片数据,每次都请求获
取显示,
太慢太耗流量:第三层优化
第3层优化:图片三级缓存处理(LRU)
1).内存缓存优先加载,速度最快2).本地缓存次优先加载,速度稍快
3).网络缓存最后加载,速度由网络速度决定(浪费流量)
第4层:对数据列表进行分页加载显示
1). 自己做:通过Scroll监听
listView setonSecrollistener (scolllistener),当到达底部时加载下一页列表数据并显示
2).使用第三方开源框架: Android-PulToRefresh 或其它
6. style和Theme
1). style[: 多个视图标签属性的集合
好处:
复用标签属性
目标:布局文件中的视图标签|
2). theme :本质也是style
好处:
复用标签属性
目标:
功能清单文件中整个应用/Activity
7.练习
1).应用功能编码的基本流程
外观:
布局文件,读取数据,定义Adapter,显
示列表
行为:设置事件监听,并在回调就去中做出对应的
响应
2).初始显示列表和更新列表
3). GridView的基本使用
3.常用的UI布局
1). LinearLayout:线性布局
用来控制其子View以水平或垂直方式展开显示2). RelativeLayout: 相对布局
用来控制其子View以相对定位的方式进行布局显示3). FrameLayout: 帧布局
I每一个子View都代表一个画面, 后面出现的会覆盖前面的
画面
通过子View的android:1 ayout_ gravity属性来指定子视图的位置
3.常用的UI布局
1). LinearLayout:线性布局
用来控制其子View以水平或垂直方式展开显示2). RelativeLayout: 相对布局
用来控制其子View以相对定位的方式进行布局显示3). FrameLayout: 帧布局
I每一个子View都代表一个画面, 后面出现的会覆盖前面的
画面
通过子View的android:1 ayout_ gravity属性来指定子视图的位置
内边距属性
android:padding
android:paddingLeftandroid:paddingTopandroid:paddingRightandroid:paddingBottom外边距属性
android:layout ]margin
android:layout marginLefandroid:layout marginTop
antispid:layout marginRightandroid:layout marginBottom
2).只针对 RelativeLayout
相对兄弟视图定位
同方向对齐属性
android:layout. alignLeftandroid;layout alignTopandroid:Bsout alignRightandroid:layout alignBottom
反方向对齐属性
android:layout toleftOfandroid:layout toRightOfandroid:layout aboveandroid:layout below
3).只针对LinearLayout
wrientation(方向)layout weight(权重)
layout_ weight( 权重)的值
=0(默认值):指定多大空间就占据多大的空间
>0:将父视图中的可用空间进行分割,值越大权重就越大,占据的比例就会越大
Layout_ weight的使用场景
将布局的宽度或高度平均分成几个等份
垂直方向上占用中间所有空间或水平方向上占用中间所有空间
5. ListView的使用
1).理解
ListView是-稗用来星示多↑可滑功項(Item)列表的的ViewGroup需要使用Adapter将集合数据和毎一个ltem所対座的布局劫恣遁配到ListView中豆示一
温示列表: listView.setAdapter(adapter)更新列表: adapter,notifyDataSetChanged()
Data
Adapter ListView
Item Layout
2018/5/15 20:29:42