标签:

一个抽象类继承BaseAdapter

package com.lei.adapter;

import java.util.ArrayList;

import java.util.List;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

public abstract class MyBaseAdapter extends android.widget.BaseAdapter {

private List data = new ArrayList();

private Context context;

private int layoutId;

public MyBaseAdapter(Context context, int layoutId, List datas) {

this(context, layoutId);

this.data = datas;

}

public MyBaseAdapter(Context context, int layoutId) {

this.context = context;

this.layoutId = layoutId;

}

public int getCount() {

return data.size();

}

public T getItem(int position) {

return data.get(position);

}

public long getItemId(int position) {

return position;

}

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = ViewHolder.newInstance(context, convertView,

layoutId, parent, position);

setViewDetails(holder, getItem(position));

return holder.getConvertView();

}

//要实现的抽象方法,具体为控件赋值

public abstract void setViewDetails(ViewHolder holder, T data);

}

ViewHolder

根据自己需求,增加一些方法

package com.lei.adapter;

import android.content.Context;

import android.graphics.Bitmap;

import android.util.SparseArray;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.TextView;

public class ViewHolder {

private View mContentView;

private SparseArray mViews;// 装控件

private int mPosition;

private Context context;

public static ViewHolder newInstance(Context context, View convertView,

int layoutId, ViewGroup group, int position) {

ViewHolder holder = null;

if (convertView == null) {

holder = new ViewHolder(context, layoutId, group, position);

} else {

holder = (ViewHolder) convertView.getTag();

holder.mPosition = position;

}

return holder;

}

private ViewHolder(Context context, int layoutId, ViewGroup group,

int position) {

this.context = context;

mViews = new SparseArray();

this.mPosition = position;

mContentView = LayoutInflater.from(context).inflate(layoutId, group,

false);

mContentView.setTag(this);

}

public T getViewById(int resId) {

View view = mViews.get(resId);

if (null == view) {

view = mContentView.findViewById(resId);

mViews.put(resId, view);

}

return (T) view;

}

/**

* 为textview设置内容

*

* @param resId

* @param text

*/

public void setTextForTv(int resId, String text) {

TextView tv = getViewById(resId);

tv.setText(text);

}

/**

* 设置文字颜色

*

* @param resId

* @param colorId

*/

public void setTextColor(int resId, int colorId) {

TextView tv = getViewById(resId);

tv.setTextColor(colorId);

}

public void setImageResource(int resId, int imgId) {

ImageView img = getViewById(resId);

img.setImageResource(imgId);

}

public void setImageBitmap(int resId, Bitmap bitmap) {

ImageView img = getViewById(resId);

img.setImageBitmap(bitmap);

if (null != bitmap) {

bitmap.recycle();

}

}

public View getConvertView() {

return mContentView;

}

public int getPosition() {

return mPosition;

}

}

下面是一个Demo

package com.lei.vpdemo;

import java.util.ArrayList;

import java.util.List;

import android.app.ListActivity;

import android.content.Context;

import android.graphics.Color;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Toast;

import com.lei.adapter.MyBaseAdapter;

import com.lei.adapter.ViewHolder;

public class MyListAct extends ListActivity {

List mData;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

initData();

ListAdapter adapter = new ListAdapter(this,

android.R.layout.simple_list_item_multiple_choice, mData);

setListAdapter(adapter);

}

private void initData() {

mData = new ArrayList();

mData.add("JAVA");

mData.add("Android");

mData.add("浪潮之巅");

mData.add("疯狂讲义");

}//adapter 实现类,只需要实现它的抽象方法和构造函数public class ListAdapter extends MyBaseAdapter {

Context context;

public ListAdapter(Context context, int layoutId, List datas) {

super(context, layoutId, datas);

this.context = context;

}

// 回调,为item赋值

@Override

public void setViewDetails(ViewHolder holder, final String data) {

holder.setTextForTv(android.R.id.text1, data);

//通过个体position为item设置个性化

if (holder.getPosition() == 2) {

holder.setTextColor(android.R.id.text1, Color.GREEN);

}

if (holder.getPosition() == 3) {

holder.getViewById(android.R.id.text1).setOnClickListener(

new OnClickListener() {

public void onClick(View v) {

Toast.makeText(context, data, Toast.LENGTH_LONG)

.show();

}

});

}

}

}

}

效果图如下:

标签:

Java list 适配器_适配器基类--万能适配器(BaseAdapter)相关推荐

  1. java enum 父类_枚举基类Enum详解

    本文主要是对枚举类型的基类Enum类做一个介绍: 首先,Enum类位于java.lang包下,根据类的介绍可以发现,Enum类是Java中所有枚举类的父类,将枚举作为一个set或者Map的keys来使 ...

  2. java printerjob打印_利用PrinterJob类实现打印控制

    无论采用哪种语言来开发应用系统,打印功能总是少不了的.为了节省Java程序开发人员的工作量,在Java语言中专门提供了一个PrinterJob类来帮助开发人员实现打印控制的功能. 本文将给大家介绍一下 ...

  3. java validate校验_自定义工具类实现validate参数校验

    前言 相信项目中做一些htttp接口,避免不了要对参数进行校验,大多数情况下,其实我们只是校验是否为NULL就可以了 1.通过注解实现各种状态的字段 1.1.引入依赖 默认的版本是6.0.9.Fina ...

  4. java 访问类变量_如何访问类的成员变量和方法

    在Java应用程序中,经常需要访问类的成员变量和方法,以实现程序的功能,请问应该如何访问类的成员变量和方法?在Java中通过类的实例(即对象)点(.)运算符来访问类的成员变量和方法,今天百分网小编为大 ...

  5. 华为光伏usb适配器_苹果20W USBC电源适配器官方降价至149元,与5W、12W适配器售价看齐...

    北京时间2020年10月14日凌晨,苹果发布了新一代iPhone 12系列共计4款新手机.并且无一例外,四款新iPhone都不再随机附送电源适配器,而是仅保留一条USB-C转Lightning数据线. ...

  6. python根据一个基类生成派生类_将基类转换为派生类python(或者更像pythonic的扩展类的方式)...

    下面是如何"神奇地"用定制的子类替换模块中的类,而不接触模块.它只是普通子类化过程中的几行额外代码,因此给了您(几乎)所有子类化的能力和灵活性.例如,如果您愿意,这允许您添加新属性 ...

  7. java静态方法声明_方法本地类中的Java最终静态声明

    在方法内部声明局部内部类时,为什么包含最终的静态String或int是合法的,而包含其他对象却不合法? 例如: class Outer { void aMethod() { class Inner { ...

  8. java 实例化异常_如何处理实例化类对象时发生的异常

    java version "1.7.0_45" 你好 我正在构造函数中初始化类方法.但是,新URL(uploadUrl)将在构造函数中引发异常.因此,如果发生这种情况,用户应该无法 ...

  9. 数据库decimal对应java什么类型_数据库字段类型和Java的对应关系

    1.CHAR.VARCHAR .LONGVARCHAR 可映射为 String 或 char[],但 String 更适合于一般用法 2.BINARY.VARBINARY 和 LONGVARBINAR ...

  10. java marshal 序列化_求教Marshal类实现序列化出现的问题

    小弟最近在研究利用Marshal实现序列化和反系列化,主要是使用Marshal类里的两个方法,StructureToPtr和PtrToStructure,这两个类的具体讲解和用法我就不多赘述 了,具体 ...

最新文章

  1. 聊一聊2020年实例分割领域的进展和未来展望
  2. Slide:11g新特性-在线实施补丁online patching
  3. (转)iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等
  4. [03]常用正则表达式
  5. 第十六讲 傅里叶级数拓展
  6. 绿色运营,数据中心还得靠自动化
  7. 【特征工程】17种将离散特征转化为数字特征的方法
  8. AtCoder Beginner Contest 177总结
  9. python基础函数式编程(十七)
  10. JavaScript权威指南笔记 - 1
  11. 番外篇 之 实现Unity和Android进行交互(基于Android Studio 3.1.1以及Jar包方式)
  12. html入门:网页字体的设置
  13. ubuntu win10 双系统 卸载ubuntu
  14. CapstoneCS5265设计原理图|CS5265设计DP转HDMI2.0 4K60HZ转换电路|CS5265demoboard
  15. 学校固定资产计算机台账,(一)固定资产台账.doc
  16. WXPY自动转发群消息
  17. FX系列DSZR回原点指令结束后M8029不亮的解决方案
  18. iOS开发者,金九银十,这样写简历才能让大厂面试官看重你!
  19. Vim中如何全选并复制?
  20. chariot iperf使用_ixchariot吞吐量测试

热门文章

  1. 半边数据结构(The_Half-Edge_Data_Structure)
  2. c++全局变量,局部变量,内存布局,默认初始化
  3. 实现MFC扩展DLL中导出类和对话框
  4. 在对话框中进行消息映射((CEdit*)GetDlgItem(IDC_EDIT_TEST))-SetWindowText(this is a edit box)...
  5. gan网络损失函数_生成对抗网络的最新研究进展
  6. JavaScript数据结构和算法(转载)
  7. f-admin——基于Laravel框架开发的基础权限后台系统
  8. go语言渐入佳境[10]-function
  9. vue2.0 keep-alive 缓存页面数据
  10. 5G商业化进程提速 运营商推进网络智能化转型