数据适配器有很多种,今天在这里记录一下最通用是适配器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. HTML特殊符号对照表

    特殊符号 命名实体 十进制编码 特殊符号 命名实体 十进制编码 Α Α Α Β Β Β Γ Γ Γ Δ Δ Δ Ε Ε Ε Ζ Ζ Ζ Η Η Η Θ Θ Θ Ι Ι Ι Κ Κ Κ Λ Λ Λ Μ ...

  2. 再议C++的性能

    最近在公司里的项目做的是性能优化,相关性能调优的经验总结也在前一篇文章里说了.这里再说一说和性能相关的东西.主要针对的是C++类库中常用的一些数据结构,比方说std::string.顺序容器(vect ...

  3. Java中的HashSet和TreeSet

    1:Set集合(理解) (1)Set集合的特点 无序,唯一 (2)HashSet集合(掌握) A:底层数据结构是哈希表(是一个元素为链表的数组) B:哈希表底层依赖两个方法:hashCode()和eq ...

  4. 关于谷歌浏览器 表单元素获取焦点后自动增加外边线的问题解决CSS代码

    input,textarea:focus { outline: none;} /*去除表单元素默认边框*/

  5. Swift基础语法 、 元组(Tuple)

    字符串的使用 1.1 问题 Swift的String和Character类型提供了一个快速的,兼容Unicode的方式来处理代码中的文本信息.创建和操作字符串的语法与C语言中字符串类似.本案例将学习如 ...

  6. TCP/IP 协议:IP 协议

    首先来看一下IP协议在实际中的位置: 我们只关系流程,不关系当前具体的服务类型 1.IP协议概述 作用: 从上图或从应用层->运输层->网络层->链路层来看,IP协议属于网络层,也就 ...

  7. Js控制滚动条

    1>全局控制 //向上滑动显示 var initTop = 0; var i = 1; $(window).scroll(function(){ var scrollTop = $(docume ...

  8. ibatis批量操作补充

    ibatis批量操作  这文章的补充吧. review代码的时候发现一个页面应用排序设置功能,原先代码中,进行了循环update实现.虽然应用较少,不过无谓浪费数据库链接实在不是一个好的想法. 所以, ...

  9. .jre下的lib和jdk下的lib的区别

    jre是JDK的一个子集.提供一个运行环境.JDK的lib目录是给JDK用的,例如JDK下有一些工具,可能要用该目录中的文件.例如,编译器等.JRE的lib目录是为JVM,运行时候用的.包括所有的标准 ...

  10. Bean

    1. Bean配置项 1.1. ID 在整个IOC容器中Bean的唯一标识 1.2. Class 具体要实例化的类 1.3. Scope 范围,作用域 1.4. Constructor argumen ...