数据适配器有很多种,今天在这里记录一下最通用是适配器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的使用的更多相关文章

  1. Android BaseAdapter用法

    BaseAdapter 适配器 BaseAdapter是一个抽象类,因此要写自已的适配器,段继承此类,并实现以下方法: @Overridepublic int getCount() { return ...

  2. android Baseadapter 和 ViewHolder的使用

    昨晚学习了徐大神的关于BaseAdapter的讲解,让我受益匪浅特来博客留下印记 说到baseadapter大家一定都不陌生,下面这张图就展示了数据.listview.baseadapter 之间的关 ...

  3. Android——BaseAdapter相关

    layout文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  4. Android BaseAdapter ListView (明星简介列表)

    1.搭建布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" andro ...

  5. Android BaseAdapter Gallery 画廊视图 (左右拖动图片列表拖至中间时图片放大显示)

    画廊视图使用Gallery表示,能够按水平方向显示内容,并且可以手指直接拖动图片和移动,一般用来浏览图片,,被选中的选项位于中间,并且可以响应事件显示信息.在使用画廊视图时,首先在屏幕上添加Galle ...

  6. Android BaseAdapter ListView (SD卡中文件目录显示出来)

    首先搭建activity_main.xml布局 搭建ListView中显示的布局 创建适配器 将File数据和UI适配 MainActivity中将ListView设置适配器,并设置监听 //获取SD ...

  7. Android BaseAdapter加载多个不同的Item布局时出现UncaughtException in Thread main java.lang.ArrayIndexOutOfBoundsException: length=15; index=15

    java.lang.ArrayIndexOutOfBoundsException: length=15; index=15 异常出现的场景:在做聊天界面时,需要插入表情,图片,文字,名片,还有几种较为 ...

  8. Android BaseAdapter和ViewHolder 优化 解决ListView的item抢焦点问题和item错乱问题

    首先赞下hyman大神 曾经仅仅是简单的重写个BaseAdapter,将getView方法保持抽象.而ViewHolder没有抽象过. .. ViewHolder (用了一个集合+泛型管理存取view ...

  9. Android BaseAdapter

    ListView显示与缓存机制:      只会加载当前屏幕所要显示的数据.显示完成就会被回收到Recycler中.       BaseAdapter 基本结构:      public int g ...

随机推荐

  1. Get IP Address in Android 4.0+

    在android2.3以下的系统中,可以使用如下的代码来获取Android系统的本地IP地址: [java]  private String getLocalIPAddress() throws So ...

  2. python分割字符串split,filter函数用法

    现有字符串,需要取出用空格分隔的第一段,操作如下 >>> product_model = ‘WS-C2960G-24TC-L – Fixed Module 0′>>> ...

  3. 【winform 学习】C# 转换成JSON对象

    C#里面对json的处理有2种,JavaScriptSerializer和DataContractJsonSerializer. JavaScriptSerializer读出来就是key-value  ...

  4. 【Windows批处理III】实现删除含自定字符串的文件和文件夹(搜索子目录)

    1)目的:实验室小网空间因镜像版本太多,容量告警,希望清出一部分空间 具体需求:删除E盘下,所有含rar字符串的文件: 删除E盘下,所有含hi6620字符串文件夹: 步骤: (风险请知:如果不chec ...

  5. Unit Tests

    The Three Laws of TDD First Law : you may not write production code until you have written a failing ...

  6. PHP如何批量生成手机号-使用PHP 如何生成一组不重复的手机号码?

    <?php //匹配手机号的正则表达式 #^(13[0-9]|14[47]|15[0-35-9]|17[6-8]|18[0-9])([0-9]{8})$# $arr = array( 130,1 ...

  7. [转]UDP穿透NAT的原理与实现(UDP“打洞”原理)

    NAT(The IP Network Address Translator) 的概念和意义是什么? NAT, 中文翻译为网络地址转换.具体的详细信息可以访问RFC 1631 - http://www. ...

  8. log4net.config

    <?xml version="1.0" encoding="UTF-8"?> <log4net> <root> <le ...

  9. HTML 空格的表示符号 nbsp / ensp / emsp 的区别

    HTML 空格的表示符号 nbsp / ensp / emsp 的区别?     半角的不断行的空白格(推荐使用)    半角的空格    全角的空格

  10. pt-fifo-split使用

    percona-toolkit系列-pt-find http://blog.itpub.net/23249684/viewspace-1354308/ 在<mysql插入/更新数据>这篇文 ...