UI总结

使用
  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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值