Android课堂笔记——BaseAdapter及其优化
来源:互联网 发布:成都市有几个行知小学 编辑:程序博客网 时间:2024/06/05 11:13
BaseAdapter概述:
BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter,在MVC框架中,担任适配器的角色
*注 控制器:是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
需要重写的四个方法
使用BaseAdapter必须写一个类继承它,同时BaseAdapter是一个抽象类,继承它必须实现它的方法。BaseAdapter的灵活性就在于它要重写很多方法
需要重写的方法如下:
1.getCount() 我们将要绘制的资源数。
2.getView() 通过传入的参数position,加工成我们想要的View并返回,最终供GridView使用
3.getItemId() 该方法的返回值决定第position处的列表项的ID,某些方法(如onclicklistener的onclick方法)有id这个参数,而这个id参数就是取决于getItemId()这个返回值的。
4.getItem() getItem方法不是在Baseadapter类中被调用的,而是在Adapterview.getItemAtPosition(position) 中被调用的。getItemAtPosition(position) 是在setOnItemClickListener、setOnItemLongClickListener、setOnItemSelectedListener的点击选择处理事件中方便地调用来获取当前行数据的。
其中getView方法是最为重要的一个方法,并且会涉及到程序优化的问题,这样将会大大的提高代码的执行效率,从而加强程序的用户体验,而大部分的优化都是从对getView方法不同方式的重写而体现的,这里有三种方法重写getView,分别对这个方法有不同程度的优化。
方法一:完全没有任何的优化
public View getView(int position, View convertView, ViewGroup parent) { int num =list.get(position); View view = View.inflate(context,R.layout.myitem, null); TextView textView = (TextView) view.findViewById(R.id.tv); textView.setText(num + ""); return view; }
方法二:普通的优化
public View getView(int position, View convertView, ViewGroup parent) { int num=list.get(position);if (convertView == null) { convertView = View.inflate(context, R.layout.myitem, null); } TextView textView=(TextView)convertView.findViewById(R.id.tv); textView.setText(num+""); return convertView;
这个方法主要运用了ConvertView回收机制来减少方法的多次调用,减少了方法一中 View view = View.inflate(context,R.layout.myitem, null);
这段代码的重复使用,从而对方法进行了优化,但是优化不彻底,findViewById还是会次次执行。
方法三:最终版本的优化
public View getView(int position, View convertView, ViewGroup parent) { int num = list.get(position);// 2 ViewHolder viewHolder; if (convertView == null) { convertView = View.inflate(context, R.layout.myitem, null); viewHolder = new ViewHolder(); viewHolder.textView = (TextView) convertView.findViewById(R.id.tv); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.textView.setText(num + ""); return convertView; } // 起到缓存作用的类ViewHolder static class ViewHolder { TextView textView; }}
这段代码处理利用了ConvertView回收机制并且同时也使用了ViewHolder来减少findViewById的执行次数,从而达到最终的优化。
ViewHolder类:通常出现在适配器里,为的是listview滚动的时候快速设置值,而不必每次都重新创建很多对象,从而提升性能。
- Android课堂笔记——BaseAdapter及其优化
- Android学习笔记---BaseAdapter优化
- Android开发——BaseAdapter的优化
- 【Android】以BaseAdapter做适配器的ListView及其性能优化
- Android基础入门教程——2.4.3 BaseAdapter优化
- Android——数据适配器 BaseAdapter的使用和优化
- Android 课堂笔记——shape
- Android课堂笔记——selector
- Android课堂笔记——dialog对话框
- Android课堂笔记——ViewPager
- Android课堂笔记——Menu
- Android课堂笔记—SQLite3和ContentProvider
- Android开发————BaseAdapter学习笔记
- android——BaseAdapter使用
- Android开发————Android ListView使用BaseAdapter与ListView的优化
- android BaseAdapter(修改优化)
- Android BaseAdapter介绍和优化
- Android BaseAdapter介绍和优化
- printf的实现,my_printf
- Android---进入APP后的广告界面
- docker(7):使用python 连接数据库,插入并查询数据--link
- MVC和三层架构的区别
- JSP学习之初识JSP(实现简单的计算器)
- Android课堂笔记——BaseAdapter及其优化
- 常见性能优化策略的总结
- js头像(图片)上传,立即展示!——李帅醒博客
- linux tty driver
- HBase安装及简单使用
- 退出 、 等待
- Linux的pkg-config命令
- 编写一个函数模板,可对两个任意格式的数值(包括字符格式)进行比较,返回两者的最小值,同时保证较高的精度。
- React Native Android 应用层实战沦陷记