Android BaseAdapter的使用
数据适配器有很多种,今天在这里记录一下最通用是适配器BaseAdapter。
首先说一下什么是适配器,这里我从网上找到一幅图片

由上图我们不难看出,所谓的适配器,就是数据与视图之间的桥梁。由它把数据绑定到ListView控件上。
具体怎么绑定呢,今天就来记录一下。首先我们先看一下效果图。

这是我写的一个简单的图片、标题、内容布局。关于ListView 我还想说明一点,就是它的缓存机制。它把所有当前页面不显示的内容都放到缓存里,当页面往上滑动时,超出屏幕的部分也会放到缓存里,新显示的部分会直接从缓存里面取。

1、首先新建一个Android.XML文件,用来显示ListView每一行将要显示样式。
<?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="match_parent" > <ImageView
android:id="@+id/item_img"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_launcher" /> <TextView
android:id="@+id/item_title"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/item_img"
android:text="标题"
android:textSize="25sp"
android:gravity="center_horizontal"
/> <TextView
android:id="@+id/item_content"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_toRightOf="@+id/item_img"
android:layout_below="@+id/item_title"
android:layout_alignParentRight="true"
android:text="内容"
android:textSize="15sp"
android:gravity="center_vertical"
/> </RelativeLayout>
2、定义一个Bean对象,用来存放ListView每一行将要显示的数据
package com.example.baseadapter;
public class ItemBean {
public int itemImgResid;
public String itemTitle;
public String itemContent;
public ItemBean(int itemImgResid,String itemTitle,String itemContent) {
this.itemImgResid = itemImgResid;
this.itemTitle = itemTitle;
this.itemContent = itemContent;
}
}
3、自定义Adapter 并继承BaseAdapter 并重写里面的4个方法。

其中第四个最重要,就是获取每个Item将要显示的内容。
package com.example.baseadapter; import java.util.List; 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; public class MyAdapter extends BaseAdapter { private List<ItemBean> listDate;
private LayoutInflater mLayoutInflater; public MyAdapter(Context context,List<ItemBean> listBean) {
mLayoutInflater = LayoutInflater.from(context);
this.listDate = listBean;
} @Override //获取数据集中的数据个数
public int getCount() {
// TODO Auto-generated method stub
return listDate.size();
} @Override //获取数据集中制定索引对应的数据项
public Object getItem(int position) {
// TODO Auto-generated method stub
return listDate.get(position);
} @Override //获取指定行对应ID
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
} @Override //获取每一个Item的显示内容
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null;
if(convertView == null)
{
viewHolder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.itemlist, null);
//实例化控件
viewHolder.img = (ImageView) convertView.findViewById(R.id.item_img);
viewHolder.textTitle = (TextView) convertView.findViewById(R.id.item_title);
viewHolder.textContent = (TextView) convertView.findViewById(R.id.item_content);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
} //抽取bean对象
ItemBean bean = listDate.get(position);
//设置控件数据
viewHolder.img.setImageResource(bean.itemImgResid);
viewHolder.textTitle.setText(bean.itemTitle);
viewHolder.textContent.setText(bean.itemContent);
return convertView; } //ViewHolder用于缓存
class ViewHolder{
public ImageView img;
public TextView textTitle;
public TextView textContent;
}
}
做到这里基本上就结束了。在主页面我们直接调用就好了。还有一些细节的代码,就没粘出来了。应该不影响大家的理解。
package com.imooc.baseadaptertest; 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);
ListView listView = (ListView) findViewById(R.id.lv_main);
List<ItemBean> dataList = new ArrayList<>();
// 创建假数据
for (int i = 0; i < 20; i++) {
dataList.add(new ItemBean(
R.drawable.ic_launcher,
"我是更多<<<<<<"+i,
"我是内容,我的字数比较多"+i
));
}
// 设置适配器
listView.setAdapter(new MyAdapter(this, dataList));
}
}
Android BaseAdapter的使用的更多相关文章
- Android BaseAdapter用法
BaseAdapter 适配器 BaseAdapter是一个抽象类,因此要写自已的适配器,段继承此类,并实现以下方法: @Overridepublic int getCount() { return ...
- android Baseadapter 和 ViewHolder的使用
昨晚学习了徐大神的关于BaseAdapter的讲解,让我受益匪浅特来博客留下印记 说到baseadapter大家一定都不陌生,下面这张图就展示了数据.listview.baseadapter 之间的关 ...
- Android——BaseAdapter相关
layout文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...
- Android BaseAdapter ListView (明星简介列表)
1.搭建布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" andro ...
- Android BaseAdapter Gallery 画廊视图 (左右拖动图片列表拖至中间时图片放大显示)
画廊视图使用Gallery表示,能够按水平方向显示内容,并且可以手指直接拖动图片和移动,一般用来浏览图片,,被选中的选项位于中间,并且可以响应事件显示信息.在使用画廊视图时,首先在屏幕上添加Galle ...
- Android BaseAdapter ListView (SD卡中文件目录显示出来)
首先搭建activity_main.xml布局 搭建ListView中显示的布局 创建适配器 将File数据和UI适配 MainActivity中将ListView设置适配器,并设置监听 //获取SD ...
- Android BaseAdapter加载多个不同的Item布局时出现UncaughtException in Thread main java.lang.ArrayIndexOutOfBoundsException: length=15; index=15
java.lang.ArrayIndexOutOfBoundsException: length=15; index=15 异常出现的场景:在做聊天界面时,需要插入表情,图片,文字,名片,还有几种较为 ...
- Android BaseAdapter和ViewHolder 优化 解决ListView的item抢焦点问题和item错乱问题
首先赞下hyman大神 曾经仅仅是简单的重写个BaseAdapter,将getView方法保持抽象.而ViewHolder没有抽象过. .. ViewHolder (用了一个集合+泛型管理存取view ...
- Android BaseAdapter
ListView显示与缓存机制: 只会加载当前屏幕所要显示的数据.显示完成就会被回收到Recycler中. BaseAdapter 基本结构: public int g ...
随机推荐
- 将字符串拆分为id
Sql : alter function [fn_splitSTR] ( ), -- 5,6,7 ) -- ',' ) )) as begin declare @splitlen int begin ...
- Unparsed aapt error(s)! Check the console for output解决方法
在Eclipse平台进行Android 应用开发时,编辑,修改或增删 res/下资源文件时有时会遇到如下错误提示:“Unparsed aapt error(s)! Check the console ...
- 315Mhz、433Mhz无线遥控信号的解码分析和模拟
摘要 前段时间学习无线电的同时了解到arduino是作为技能尚未成熟技术宅的我继树莓派又一个不错的选择.于是花了200元购得3块arduino开发板(2*nano&1*uno)和其他传感器等, ...
- php大力力 [041节] 今天没有写日志哈
php大力力 [041节] 今天没有写日志哈 如何下拉,左边的side颜色 能顺延下去?? 今天做了一个表格显示
- HDU 4576 简单概率 + 滚动数组DP(大坑)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4576 坑大发了,居然加 % 也会超时: #include <cstdio> #includ ...
- C# 计算时间差 用timespan函数
TimeSpan 结构 表示一个时间间隔. 命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 1.DateTime值类型代表了一个从公元0001年1月1日0点0分 ...
- Python 主成分分析PCA
主成分分析(PCA)是一种基于变量协方差矩阵对数据进行压缩降维.去噪的有效方法,PCA的思想是将n维特征映射到k维上(k<n),这k维特征称为主元,是旧特征的线性组合,这些线性组合最大化样本方差 ...
- kernel/module.c
#include <linux/errno.h>#include <linux/kernel.h>#include <asm/segment.h>#include ...
- JavaScript中的document.cookie的使用
转:http://blog.csdn.net/liuyong0818/article/details/4807473 我们已经知道,在 document 对象中有一个 cookie 属性.但是 Coo ...
- 基于MVC4+EasyUI的Web开发框架形成之旅--基类控制器CRUD的操作
在上一篇随笔中,我对Web开发框架的总体界面进行了介绍,其中并提到了我的<Web开发框架>的控制器的设计关系,Web开发框架沿用了我的<Winform开发框架>的很多架构设计思 ...