数据适配器有很多种,今天在这里记录一下最通用是适配器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. VS2015打开工程 未能正确加载“”包的问题

    启动vs2015专业版时,出现类似于这样的提示框,有好几个,点击是或否,但下次打开还是会出现.寻找了网上的一些解决办法,例如用vs命令窗口或其他,但都无疾而终,下面提供的这个办法,顺利解决此问题 1. ...

  2. 《Java中的抽象类及抽象类的作用》

    //抽象类示例: abstract class Shape1 { { System.out.println("执行Shape的初始化块..."); } private String ...

  3. 探索javascript----有关数组的常用方法

    与字符串的转换: str.split(","):将一个字符串以为英文逗号分割,返回一个数组: arr.join(","):返回用指定分隔符间隔的含所有数组元素的 ...

  4. HOW TO BE SINGLE 最后那段的摘录

    我一直在思考我们不得不单身的时间这个时间我们需要擅长一个人独处但是有多少独处的状态是我们想要拥有的呢难道不是件很危险的事情吗当你适应状态并且如鱼得水的时候所以当你安定下来 你就会与某人擦肩而过吗 有些 ...

  5. Libgdx 开发指南——目录

    本系列文档选译自libgdx github项目 wiki : https://github.com/libgdx/libgdx/wiki 由于关于Libgdx的中文文档非常稀缺,因此在这里对官方Wik ...

  6. ubuntu14.04 键盘错位小问题

    分享一个ubuntu14.04里的小问题,不知道有没有人跟我一样悲催 问题: 键盘错位了,@和"两个符合正好颠倒,~#这几个也错乱了,~符号跑到了|上,#跑到了shift+|上,这个问题在敲 ...

  7. sass安装 使用

    一 什么是sass      sass是一种css开发工具.提供了很多便利的写法,使得css开发变得简单  易维护       sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号:另一 ...

  8. Spark 个人实战系列(2)--Spark 服务脚本分析

    前言: spark最近非常的火热, 本文不讲spark原理, 而是研究spark集群搭建和服务的脚本是如何编写的, 管中窥豹, 希望从运行脚本的角度去理解spark集群. 研究的spark为1.0.1 ...

  9. [debian]SublimeText>PrettyCode無效

    怣 apt-get install node http://nodejs.org/#download.

  10. 2015GitWebRTC编译实录13

    2015.07.21 libboringssl.a 编译通过主要是生成路径,去除test文件比较啰嗦,后继测试需要重点跟进下 CC obj/third_party/boringssl/boringss ...