Java list 适配器_适配器基类--万能适配器(BaseAdapter)
标签:
一个抽象类继承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)相关推荐
- java enum 父类_枚举基类Enum详解
本文主要是对枚举类型的基类Enum类做一个介绍: 首先,Enum类位于java.lang包下,根据类的介绍可以发现,Enum类是Java中所有枚举类的父类,将枚举作为一个set或者Map的keys来使 ...
- java printerjob打印_利用PrinterJob类实现打印控制
无论采用哪种语言来开发应用系统,打印功能总是少不了的.为了节省Java程序开发人员的工作量,在Java语言中专门提供了一个PrinterJob类来帮助开发人员实现打印控制的功能. 本文将给大家介绍一下 ...
- java validate校验_自定义工具类实现validate参数校验
前言 相信项目中做一些htttp接口,避免不了要对参数进行校验,大多数情况下,其实我们只是校验是否为NULL就可以了 1.通过注解实现各种状态的字段 1.1.引入依赖 默认的版本是6.0.9.Fina ...
- java 访问类变量_如何访问类的成员变量和方法
在Java应用程序中,经常需要访问类的成员变量和方法,以实现程序的功能,请问应该如何访问类的成员变量和方法?在Java中通过类的实例(即对象)点(.)运算符来访问类的成员变量和方法,今天百分网小编为大 ...
- 华为光伏usb适配器_苹果20W USBC电源适配器官方降价至149元,与5W、12W适配器售价看齐...
北京时间2020年10月14日凌晨,苹果发布了新一代iPhone 12系列共计4款新手机.并且无一例外,四款新iPhone都不再随机附送电源适配器,而是仅保留一条USB-C转Lightning数据线. ...
- python根据一个基类生成派生类_将基类转换为派生类python(或者更像pythonic的扩展类的方式)...
下面是如何"神奇地"用定制的子类替换模块中的类,而不接触模块.它只是普通子类化过程中的几行额外代码,因此给了您(几乎)所有子类化的能力和灵活性.例如,如果您愿意,这允许您添加新属性 ...
- java静态方法声明_方法本地类中的Java最终静态声明
在方法内部声明局部内部类时,为什么包含最终的静态String或int是合法的,而包含其他对象却不合法? 例如: class Outer { void aMethod() { class Inner { ...
- java 实例化异常_如何处理实例化类对象时发生的异常
java version "1.7.0_45" 你好 我正在构造函数中初始化类方法.但是,新URL(uploadUrl)将在构造函数中引发异常.因此,如果发生这种情况,用户应该无法 ...
- 数据库decimal对应java什么类型_数据库字段类型和Java的对应关系
1.CHAR.VARCHAR .LONGVARCHAR 可映射为 String 或 char[],但 String 更适合于一般用法 2.BINARY.VARBINARY 和 LONGVARBINAR ...
- java marshal 序列化_求教Marshal类实现序列化出现的问题
小弟最近在研究利用Marshal实现序列化和反系列化,主要是使用Marshal类里的两个方法,StructureToPtr和PtrToStructure,这两个类的具体讲解和用法我就不多赘述 了,具体 ...
最新文章
- 聊一聊2020年实例分割领域的进展和未来展望
- Slide:11g新特性-在线实施补丁online patching
- (转)iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等
- [03]常用正则表达式
- 第十六讲 傅里叶级数拓展
- 绿色运营,数据中心还得靠自动化
- 【特征工程】17种将离散特征转化为数字特征的方法
- AtCoder Beginner Contest 177总结
- python基础函数式编程(十七)
- JavaScript权威指南笔记 - 1
- 番外篇 之 实现Unity和Android进行交互(基于Android Studio 3.1.1以及Jar包方式)
- html入门:网页字体的设置
- ubuntu win10 双系统 卸载ubuntu
- CapstoneCS5265设计原理图|CS5265设计DP转HDMI2.0 4K60HZ转换电路|CS5265demoboard
- 学校固定资产计算机台账,(一)固定资产台账.doc
- WXPY自动转发群消息
- FX系列DSZR回原点指令结束后M8029不亮的解决方案
- iOS开发者,金九银十,这样写简历才能让大厂面试官看重你!
- Vim中如何全选并复制?
- chariot iperf使用_ixchariot吞吐量测试
热门文章
- 半边数据结构(The_Half-Edge_Data_Structure)
- c++全局变量,局部变量,内存布局,默认初始化
- 实现MFC扩展DLL中导出类和对话框
- 在对话框中进行消息映射((CEdit*)GetDlgItem(IDC_EDIT_TEST))-SetWindowText(this is a edit box)...
- gan网络损失函数_生成对抗网络的最新研究进展
- JavaScript数据结构和算法(转载)
- f-admin——基于Laravel框架开发的基础权限后台系统
- go语言渐入佳境[10]-function
- vue2.0 keep-alive 缓存页面数据
- 5G商业化进程提速 运营商推进网络智能化转型