1. BaseAdapter:是所有适配器类的父类,可以对列表项进行最大限度的定制
    1.1 自定义适配器中的方法
    getCount
    getView
    getItem
    getItemId
    1.2 LayoutInflater(布局解析器)
    –LayoutInflater有三种获得方式,资料中有详细介绍
    用来把layout布局文件解析成一个View对象,不可以new,需要使用系统服务获得

    inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

案例一:ListView的使用及优化
2. ListView优化
2.1 使用ConvertView重用组件
即拖动时被遮住、看不见的控件,重用它,而非每次创建一个新的对象

2.2 使用内部类ViewHolder+ConvertView.setTag()保存控件,而不用每次查找
ViewHolder(视图的持有者)

2.3 使用分页查询(PullToRefresh)
2.3.2 使用AsyncTask(异步任务)加载数据,最少要重写以下这两个方法
doInBackground
后台执行
onPostExecute
在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置
关键代码:
myListViewAdapter.notifyDataSetChanged();// 通知适配器数据已改变
ptrlv_main_1.onRefreshComplete();// 通知控件数据已经加载完毕

2.4 事件监听的优化
假设Item中有三个按钮,要为三个按钮定义事件,如果是下面这样
btn1.setOnclickListener(new View.onClickListener(){
public void onClick(View view){
//…
}
});
btn2.setOnclickListener(new View.onClickListener(){
public void onClick(View view){
//…
}
});
btn3.setOnclickListener(new View.onClickListener(){
public void onClick(View view){
//…
}
});
如果每屏显示10个Item,那一共创建了30个listener对象在内存中。
如果,你是在Adapter创建时,只创建一个Listener,并将其定义成全局属性,
然后通过按钮的ID来进行判断是哪个事件应该触发,
class MyAdapter extends BaseAdapter{
View.onClickListener myListener = new View.onClickListener(){
public void onClick(View view){
if(view.getId() == R.id.btn1){
//…
}else if(view.getId() == R.id.btn2){
//…
}else if(view.getId() == R.id.btn3){
//…
}
}
});
}

    //注册监听器btn1.setOnclickListener(myListener);btn2.setOnclickListener(myListener);btn3.setOnclickListener(myListener);

2.5 另外,真实开发中,图片肯定是通过网络下载,也需要通过线程异步下载进行优化等等,但由于还涉及到android网络编程,
这部分的内容会在之后的课程中介绍

  1. 第三方控件:上拉加载、下拉刷新控件
    3.1 导入第三方插件库
    Android-PullToRefresh-master.zip

3.2 在布局文件中使用第三方插件
com.handmark.pulltorefresh.library.PullToRefreshListView

3.3 自定义适配器(BaseAdapter)提供数据

3.4 异步任务查询数据(AsyncTask)
3.4.1 AsyncTask定义了三种泛型类型 Params,Progress和Result。
Params 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String
3.4.2 异步加载数据最少要重写以下这两个方法
doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里
onPostExecute(Result) 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI
–注:此方法中再通知适配器和控件
myBaseAdapter.notifyDataSetChanged();// 通知适配器数据已改变
plv_main_plv1.onRefreshComplete();// 通知控件数据已经加载完毕

3.5 给PullToRefreshListView设置相关属性
plv_main_1.setMode(Mode.BOTH);// 设置刷新模式
Mode.BOTH:同时支持上拉下拉
Mode.PULL_FROM_START:只支持下拉Pulling Down
Mode.PULL_FROM_END:只支持上拉Pulling Up

  plv_main_1.getLoadingLayoutProxy().setPullLabel("上拉刷新...");// 刚下拉时,显示的提plv_main_1.getLoadingLayoutProxy().setRefreshingLabel("正在载入...");// 刷新时plv_main_1.getLoadingLayoutProxy().setReleaseLabel("放开刷新...");// 下来达到一定距离时,显示的提示

3.6 给PullToRefreshListView设置适配器

3.7 给PullToRefreshListView设置监听器
监听器有二种:第一种上拉和下拉刷新的效果是一样的,要想实现上拉和下拉刷新效果不一样就要使用第二种
setOnRefreshListener/PullToRefreshBase.OnRefreshListener

  setOnRefreshListener2/PullToRefreshBase.OnRefreshListener2

核心:
1、listview控件、项资源、自定义适配器准备好
2、向服务端拿数据
3、初始化自定义适配器(获取视图解析器、得到项资源的view控件、获取所有的子控件,给子控件赋值、返回view)
4、绑定适配器

Android 高级控件ListView用法相关推荐

  1. Android高级控件(一)——ListView绑定CheckBox实现全选,增加和删除等功能

    Android高级控件(一)--ListView绑定CheckBox实现全选,增加和删除等功能 这个控件还是挺复杂的,也是项目中应该算是比较常用的了,所以写了一个小Demo来讲讲,主要是自定义adap ...

  2. Android 高级控件(七)——RecyclerView的方方面面

    Android 高级控件(七)--RecyclerView的方方面面 RecyclerView出来很长时间了,相信大家都已经比较了解了,这里我把知识梳理一下,其实你把他看成一个升级版的ListView ...

  3. 移动开发技术(Android)——实验5 Android高级控件的应用

    移动开发技术--实验5 Android高级控件的应用 一.实验目的 二.实验内容 1.Spinner.ListView控件与Adapter适配器(一) 2.Spinner.ListView控件与Ada ...

  4. Android高级控件(二)——SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现...

    Android高级控件(二)--SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现 写这个的原因呢,也是因为项目中用到了gif动画,虽然网上有很多的架包可以实现,不过我们还 ...

  5. Android高级控件(四)——VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷

    Android高级控件(四)--VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷 是不是感觉QQ空间什么的每次新版本更新那炫炫的引导页就特别的激动,哈哈,其实他实现起来真的很简单很 ...

  6. 《移动项目实践》实验报告——Android高级控件

    实验目的 1.熟悉App开发常用的一些高级控件及相关工具,主要包括日期时间控件的用法.列表类视图及其适配器的用法.翻页类视图及其适配器的用法.碎片及其适配器的用法等: 2.熟悉四大组件之一广播Broa ...

  7. Android高级控件----AdapterView与Adapter详解

    在J2EE中提供过一种非常好的框架--MVC框架,实现原理:数据模型M(Model)存放数据,利用控制器C(Controller)将数据显示在视图V(View)上.在Android中有这样一种高级控件 ...

  8. android listview高级,Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter

    我最近做项目用到了基本适配器BaseAdapter,所以写篇博客总结一下,希望也能对你有所帮助 什么时候用BaseAdapter(同一项存在多个控件,复杂的列表时) Android中Adapter类其 ...

  9. Android高级控件之ListView的优化以及下拉刷新页面

    1.ListView的优化 在优化之前我们先来说说配置器的自定义,为什么需要自定义配置器呢,因为系统自带的配置器不能满足我们的需求,所以就需要我们自己写配置器来实现功能, 但是在创建ListView时 ...

最新文章

  1. 响应因特网端口ping命令_如何使用Ping命令识别基本的Internet问题
  2. java web 哪些方法不能被从写_JAVA_WEB面试题
  3. 【iOS 开发】Objective - C 语法 之 类型转换
  4. mx51 uboot启动感悟
  5. CF 546E(最大流
  6. 设置超链接文字的样式
  7. TD数量不确定时如何让其宽度平均分布
  8. springmvc 的请求处理过程(精编)
  9. Android RatingBar使用Kotlin
  10. 南京大学信号与系统851考研上岸经验分享
  11. linux合并ts文件吗,UNIX LINUX MACOS shell 下载合并*.ts视频
  12. Github | 标星 1W+ 清华大学计算机系课程攻略!
  13. 高级英语(张汉熙版)第一册学习笔记(原文及全文翻译)——2 - Hiroshima-The “Liveliest“ City in Japan (excerpts)(广岛——日本“最有活力”的城市)
  14. 使用Jquery+bootstrap无限级菜单树
  15. 11个你可能不知道的Python库
  16. 1822 - Failed to add the foreign key constraint. Missing index for constraint ‘fk_tno_course‘ in the
  17. centos7 配置ssh
  18. DirectSound开发指南(1)
  19. 暴雪正在等待另一项_战网正在等待另一项安装或更新【解决步骤】
  20. 广东省计算机教育软件,2018年广东省计算机教育软件评审活动.doc

热门文章

  1. ai python 面试_面试分享系列 | 17道Python面试题,让你在求职中无往不利
  2. android菜单键选择图标,Android Design
  3. treeview 展开节点php,javascript实现TreeView 无刷新展开的实例代码_javascript技巧
  4. github 著名php,工欲善其事必先利其器,盘点Github上那些优秀的PHP项目
  5. pytorch-迁移学习学习率trick
  6. 全国计算机一级ms office考试题型,全国计算机等级考试一级MS Office题型剖析
  7. 大厂面试常问的机器学习,计算机视觉怎么学?详细指南来了!
  8. TensorFlow 最佳学习资源大全(含课程、书籍、博客、实战项目)
  9. KDD CUP 2018 前4 名解决方案公开: AI预测空气质量
  10. r语言aggredate_R语言 分组计算,不止group_by