BaseAdapter的使用与优化
来源:互联网 发布:python file readline 编辑:程序博客网 时间:2024/05/21 19:34
BaseAdapter的使用与优化
本文是基于慕课网eclipse_xu老师讲解
Android必学-BaseAdapter的使用与优化
,自己做的整理笔记,在此感谢老师和慕课网的分享,视频链接如下: http://www.imooc.com/learn/365
标签(空格分隔): BaseAdapter Android 慕课网
- BaseAdapter的使用与优化
- ListView的缓存机制
- BaseAdapter的逗比式
- BaseAdapter普通式
- BaseAdapter文艺式
数据适配器模式的应用:
1. 降低程序耦合性
2.容易扩展
1.ListView的缓存机制
需要才显示,显示完就被会受到缓存
2.BaseAdapter的逗比式
- BaseAdapter基本结构
- public int getCount() : 适配器中数据集中数据的个数
- public Object getItem(int position) : 获取数据集中与指定索引对应的数据项
- public long getItemId(int position) : 获取指定行对应的ID
- public View getView(int position,View convertView,ViewGroup parent) : 获取每一个Item的显示内容
ItemBean.java
package com.excavator.baseadapter;/** * 项目名称:BaseAdapter * 类描述: * 创建人:admin * 创建时间:2015/5/14 21:13 * 修改人:admin * 修改时间:2015/5/14 21:13 * 修改备注: */public class ItemBean { public int ItemImageResid; public String ItemTitle; public String ItemContent; public ItemBean(int itemImageResid, String itemTitle, String itemContent) { ItemImageResid = itemImageResid; ItemTitle = itemTitle; ItemContent = itemContent; }}
MainActivity.java:
package com.excavator.baseadapter;import android.app.Activity;import android.os.Bundle;import android.widget.ListView;import java.util.ArrayList;import java.util.List;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<ItemBean> itemBeanList = new ArrayList<>(); for (int i=0;i<20;i++){ itemBeanList.add(new ItemBean( R.mipmap.ic_launcher, "我是标题"+i, "我是内容"+i)); } ListView listView = (ListView) findViewById(R.id.lv_main); listView.setAdapter(new MyAdapter(this,itemBeanList)); }}
MyAdapter.java:
package com.excavator.baseadapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import java.util.List;/** * 项目名称:BaseAdapter * 类描述: * 创建人:admin * 创建时间:2015/5/14 21:21 * 修改人:admin * 修改时间:2015/5/14 21:21 * 修改备注: */public class MyAdapter extends BaseAdapter { private List<ItemBean> mList; private LayoutInflater mInflater; //数据源与适配器关联 public MyAdapter(Context context,List<ItemBean> list) { mList = list; //context : 要使用当前Adapter的界面对象 //mInflater :布局加载器对象 mInflater = LayoutInflater.from(context); } @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } //返回每一项的现实内容 @Override public View getView(int position, View convertView, ViewGroup parent) { //逗比式 没有任何优化处理,每次都创建新的View,设置控件 效率极其低下 View view = mInflater.inflate(R.layout.item, null); ImageView imageView = (ImageView) view.findViewById(R.id.iv_image); TextView title = (TextView) view.findViewById(R.id.tv_title); TextView content = (TextView) view.findViewById(R.id.tv_content); ItemBean bean = mList.get(position); imageView.setImageResource(bean.ItemImageResid); title.setText(bean.ItemTitle); content.setText(bean.ItemContent); return view; }}
3.BaseAdapter普通式
//普通式 利用了ListView的缓存特性,如果没有缓存才创建新的View 但findViewById依然会浪费大量时间 if (convertView==null) { convertView = mInflater.inflate(R.layout.item, null); } ImageView imageView = (ImageView) convertView.findViewById(R.id.iv_image); TextView title = (TextView) convertView.findViewById(R.id.tv_title); TextView content = (TextView) convertView.findViewById(R.id.tv_content); ItemBean bean = mList.get(position); imageView.setImageResource(bean.ItemImageResid); title.setText(bean.ItemTitle); content.setText(bean.ItemContent); return convertView;
4.BaseAdapter文艺式
创建内部类ViewHolder
//创建内部类ViewHolder class ViewHolder { public ImageView imageView; public TextView title; public TextView content; }
//文艺式 不仅利用了ListView的缓冲,更通过ViewHolder类来实现显示数据的视图的缓存,避免多次通过findViewById寻找控件 ViewHolder viewHolder; //判断convertView是否为空 if (convertView==null) { viewHolder = new ViewHolder(); convertView = mInflater.inflate(R.layout.item, null); viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_image); viewHolder.title = (TextView) convertView.findViewById(R.id.tv_title); viewHolder.content = (TextView) convertView.findViewById(R.id.tv_content); //通过setTag将ViewHolder与convertView绑定 convertView.setTag(viewHolder); }else { viewHolder = (ViewHolder) convertView.getTag(); } ItemBean bean = mList.get(position); viewHolder.imageView.setImageResource(bean.ItemImageResid); viewHolder.title.setText(bean.ItemTitle); viewHolder.content.setText(bean.ItemContent); return convertView;
总结:
ViewHolder优化BaseAdapter思路
- 创建Bean对象,用于封装数据
- 在构造方法中初始化用于映射的数据List
- 创建ViewHolder类,创建布局映射关系
- 判断convertView,为空则创建,并设置Tag,否则通过Tag来取出ViewHolder
- 给ViewHolder中的控件设置数据
0 0
- BaseAdapter的使用与优化
- BaseAdapter的使用与优化
- BaseAdapter的使用与优化
- BaseAdapter的使用与优化
- BaseAdapter的使用与优化
- BaseAdapter使用与优化
- 【J】BaseAdapter的使用与优化
- 数据适配器BaseAdapter的使用与优化
- BaseAdapter(数据适配器)的使用与优化
- 优化使用的BaseAdapter
- ListView与BaseAdapter的优化
- ListView与BaseAdapter的优化
- BaseAdapter的使用以及优化
- BaseAdapter的使用及优化
- Android ListView使用BaseAdapter与ListView的优化
- Android ListView使用BaseAdapter与ListView的优化
- Android ListView使用BaseAdapter与ListView的优化
- Android ListView使用BaseAdapter与ListView的优化
- 【数论】组合数求模
- Java 日期类介绍与使用(Date,Calendar等)
- 用nginx-gridFS读取MongoDB的图片
- IOS常用第三方框架 --- Reachability 检测网络连接
- [Android]Android字体高度的研究
- BaseAdapter的使用与优化
- Codeforces Beta Round #19 D线段树
- 完全分布式hadoop集群安装之三:hadoop集群配置
- Hibernate4之二级缓存配置
- Spring 3 MVC hello world example
- [org.jeecgframework.core.common.exception.MyExceptionHandler]com.thoughtworks.xstream.mapper.CannotR
- apache svn集成ldap认证
- Serializable序列化
- rails mysql mongoid carrierware gridfs 实现图片上传功能