BaseAdapter(数据适配器)的使用与优化
来源:互联网 发布:淘宝饰品店铺横幅 编辑:程序博客网 时间:2024/05/21 13:38
BaseAdapter(数据适配器)的使用与优化
BaseAdapter
把各种各样的数据源与具有格式要求的 ListView 相联系,将数据源转换成 ListView 可以显示的格式,降低程序的耦合性,使得程序方便扩展。
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显示的内容
BaseAdapter的三重境界(来自慕课网)
- 逗比式
没有利用 ListView 的缓存机制,findViewById() 多次使用造成资源的浪费 - 普通式
充分利用了 ListView 的缓存机制 - 文艺式
使用 ViewHolder 避免了重复使用 findViewById() 造成的资源浪费,提高运行速度
BaseAdapter的使用与优化
MainActivity.java
public class MainActivity extends AppCompatActivity { private List<ItemBean>itemBeanList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //实例化数据源 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.listV); //给 listView 绑定适配器 listView.setAdapter(new MyAdapter(this,itemBeanList)); }}
自定义 ListView 条目项内容
ItemBean.java
public class ItemBean { public int ItemImageId; public String ItemTitle; public String ItemContent; //使用构造函数设置相应成员变量的值 ItemBean(int ImageId , String Title , String Content){ this.ItemImageId = ImageId; this.ItemTitle = Title; this.ItemContent = Content; }}
条目项布局设置
Item.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/iv_image" android:layout_width="60dp" android:layout_height="60dp" android:src="@mipmap/ic_launcher"/> <TextView android:id="@+id/tv_title" android:layout_toEndOf="@+id/iv_image" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/iv_image" android:text="Title" android:textSize="25sp" android:gravity="center"/> <TextView android:id="@+id/tv_content" android:layout_toRightOf="@+id/iv_image" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/tv_title" android:text="content" android:textSize="15sp" android:gravity="center_vertical" /></RelativeLayout>
自定义Adapter
MyAdapter.java
public class MyAdapter extends BaseAdapter{ private List<ItemBean> mList; private LayoutInflater mInflater; public MyAdapter(Context context,List<ItemBean> list){ //使用Context对象初始化LayoutInflater对象 this.mList = list; this.mInflater = LayoutInflater.from(context); //context要是用当前的Adapter的界面对象mInflater布局装载器对象 } @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) { //BaseAdapter的三重境界之逗比式------------------------------------------------------------------------- /* * 没有任何优化处理,每次都创建新的View,设置控件 */// View view = mInflater.inflate(R.layout.item,null); //mInflater.inflate([需要装在到的布局对象],null)// ImageView imageView = (ImageView) view.findViewById(R.id.iv_image);// TextView tv_title = (TextView) view.findViewById(R.id.tv_title);// TextView tv_content = (TextView) view.findViewById(R.id.tv_content);// ItemBean bean = mList.get(position); //定义ItemBean对象// imageView.setImageResource(bean.ItemImageId); //设置ListView一个条目的内容// tv_title.setText(bean.ItemTitle);// tv_content.setText(bean.ItemContent);// return view; //END逗比式--------------------------------------------------------------------------------------- //BaseAdapter的三重境界之普通式====================================================================== //利用的ListView的缓存特性,没有缓存才创建新的View //判断 convertView 是否已加载// if(convertView == null) //为空,未被实例化,缓冲池中无缓存// {// convertView = mInflater.inflate(R.layout.item,null);// }// ImageView imageView = (ImageView) convertView.findViewById(R.id.iv_image);// TextView tv_title = (TextView) convertView.findViewById(R.id.tv_title);// TextView tv_content = (TextView) convertView.findViewById(R.id.tv_content);// ItemBean bean = mList.get(position);// imageView.setImageResource(bean.ItemImageId);// tv_title.setText(bean.ItemTitle);// tv_content.setText(bean.ItemContent);// return convertView; //END普通式======================================================================================== //BaseAdapter的三重境界之文艺式*********************************************************************** //创建内部类ViewHolder ViewHolder viewHolder; if(convertView == null) { viewHolder = new ViewHolder(); convertView = mInflater.inflate(R.layout.item,null); viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_image); viewHolder.tv_titile = (TextView) convertView.findViewById(R.id.tv_title); viewHolder.tv_content = (TextView) convertView.findViewById(R.id.tv_content); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } ItemBean bean = mList.get(position); viewHolder.imageView.setImageResource(bean.ItemImageId); viewHolder.tv_titile.setText(bean.ItemTitle); viewHolder.tv_content.setText(bean.ItemContent); return convertView; //END文艺式***************************************************************************************** } class ViewHolder{ public ImageView imageView; public TextView tv_titile; public TextView tv_content; }}
0 0
- 数据适配器BaseAdapter的使用与优化
- BaseAdapter(数据适配器)的使用与优化
- Android——数据适配器 BaseAdapter的使用和优化
- 【Android实战之旅 002】数据适配器BaseAdapter的使用与优化
- BaseAdapter 自定义适配器的使用以及优化
- BaseAdapter的使用与优化
- BaseAdapter的使用与优化
- BaseAdapter的使用与优化
- BaseAdapter的使用与优化
- BaseAdapter的使用与优化
- ListView的优化 +BaseAdapter适配器
- Android-ListView适配器BaseAdapter的使用和优化
- BaseAdapter使用与优化
- 【J】BaseAdapter的使用与优化
- BaseAdapter自定义适配器及ListView的优化
- 优化使用的BaseAdapter
- 数据适配器BaseAdapter
- 数据适配器 BaseAdapter
- 搜集oracle数据库小技巧
- tcpdump
- String.split()方法的注意点(转义符)
- hash算法
- querySelectorAll 方法相比 getElementsBy 系列方法有什么区别?
- BaseAdapter(数据适配器)的使用与优化
- KMeans聚类过程
- 373. Find K Pairs with Smallest Sums
- 统计1~n有多少个9
- Android module如何防止build文件提交到git
- STM32学习之路:I2C的基本读写
- <c++实训案列教程>单元一程序设计初步-知识点提问
- H2数据库
- 股神——计算价钱