封装的适配器 adapter

//封装的适配器类 adapter
public class NewJobAdapter extends BaseAdapter{
private List<Map<String, Object>> data = null;
private LayoutInflater mInflater = null;
private Context mContext;
public NewJobAdapter(){
}
public NewJobAdapter(Context context, List<Map<String, Object>> list) {
// 根据context上下文加载布局
this.mInflater = LayoutInflater.from(context);
mContext = context;
data = list;
}
@Override
public int getCount() {
// 在此适配器中所代表的数据集中的条目数
return data.size();
}
@Override
public Object getItem(int position) {
// 获取数据集中与指定索引对应的数据项
return position;
}
@Override
public long getItemId(int position) {
// 获取在列表中与指定索引对应的行id
return position;
}
// 获取一个在数据集中指定索引的视图来显示数据
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
// 如果缓存convertView为空,则需要创建View
if (convertView == null) {
holder = new ViewHolder();
// 根据自定义的Item布局加载布局
convertView = mInflater.inflate(R.layout.item_list_new_job, null);
holder.img = (ImageView) convertView.findViewById(R.id.id_img);
holder.time = (TextView) convertView.findViewById(R.id.id_time);
holder.address = (TextView) convertView.findViewById(R.id.id_address);
holder.message = (TextView) convertView.findViewById(R.id.id_message);
holder.price = (TextView) convertView.findViewById(R.id.id_price);
// 将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.img.setBackgroundResource((Integer) data.get(position).get("img"));
holder.time.setText((String) data.get(position).get("time"));
holder.message.setText((String) data.get(position).get("area"));
holder.address.setText((String) data.get(position).get("position"));
return convertView;
}
/**
 * ViewHolder静态类
 * 图片
 * 工作职位
 * 时间
 * 兼职地点
 * 价钱
 * */ 
static class ViewHolder {
public ImageView img;
public TextView message;
public TextView time;
public TextView address;
public TextView price;
}
}
//activity调用
public class NewJobActivity extends Activity implements OnItemClickListener{
private List<Map<String, Object>> data = null;
private List<Map<String, Object>> list;
private ListView mListView;
private NewJobAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_new_job);
mListView = (ListView) findViewById(R.id.new_job_list);
mListView.setOnItemClickListener(this);
data = getData();// 获取数据
adapter = new NewJobAdapter(this, data);
mListView.setAdapter(adapter);
}
private List<Map<String, Object>> getData(){
list = new ArrayList<Map<String, Object>>();
Map<String, Object> map;
for(int i=0; i<20; i++){
map = new HashMap<String, Object>();
map.put("time", "2015-01-30");
map.put("img", R.drawable.ic_launcher);
map.put("area", "三亚市区");
map.put("position", "促销员");
list.add(map);
}
return list;
}
public void backClick(View v){
NewJobActivity.this.finish();
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
//Toast.makeText(this, "" + arg2, Toast.LENGTH_LONG).show();
}
}
//item_list
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="3dp"
    android:orientation="vertical" >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="@drawable/mm_listitem"
        android:gravity="center_vertical" >
        <ImageView
            android:id="@+id/id_img"
            android:layout_width="55dp"
            android:layout_height="55dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:paddingLeft="5dp"
            android:src="@drawable/xiaohei" />
        <TextView
            android:id="@+id/id_address"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/id_img"
            android:padding="7dp"
            android:text="屈臣氏学生兼职"
            android:textColor="#000" />
        <TextView
            android:id="@+id/id_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:padding="7dp"
            android:text="2015-01-29"
            android:textColor="#666" />
        <TextView
            android:id="@+id/id_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_toRightOf="@+id/id_img"
            android:padding="7dp"
            android:text="三亚市区"
            android:textColor="#666" />
        <TextView
            android:id="@+id/id_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:padding="7dp"
            android:text="200元/天"
            android:textColor="#000" />
    </RelativeLayout>
</LinearLayout>
时间: 2024-08-12 03:24:05

封装的适配器 adapter的相关文章

安卓开发笔记——打造万能适配器(Adapter)

为什么要打造万能适配器? 在安卓开发中,用到ListView和GridView的地方实在是太多了,系统默认给我们提供的适配器(ArrayAdapter,SimpleAdapter)经常不能满足我们的需要,因此我们时常要去继承BaseAdapter类去实现一个自定义的适配器来满足我们的场景需要. 如果你是开发一个简单点的APP还好,可能ListView和GridView的数量不会太多,我们只要去写几个BaseAdapter实现类就可以了. 但如果有一天,你需要开发一个APP里面具有几十个ListV

Android 适配器(Adapter)、观察者(Observer) 模式

适配器(Adapter)详述:http://blog.csdn.net/jjwwmlp456/article/details/39893723 观察者(Observer)详述:http://blog.csdn.net/jjwwmlp456/article/details/39967021 AdapterView 体系 AdapterView中会使用Adapter Adapter 体系 BaseAdapter 实现了 SpinnerAdapter.ListAdapter 这样的形式,就是 适配器模

Java读源码学设计模式:适配器Adapter

适配器模式相关源码:slf4j-1.6.1.hibernate-3.6.7 大家都知道,log4j是一个广泛使用的日志工具,除此之外,sun公司在JDK中也有自己的日志工具,也就是java.util.logging.Logger.当然还有其他一些日志工具. 多种日志工具功能和使用方式类似,一般都包含debug.info.warn.error等日志级别的方法,但却没有实现共同的接口.这一点不像JDBC,虽然关系型数据库种类很多,例如MySQL.Oracle等,但是有一套统一的接口,也就是JDBC.

Android中适配器Adapter的使用

安卓中最常使用的适配器Adapter有三种:1.ArrayAdapter 2.SimpleAdapter 3.BaseAdpter,此处我们用代码结合图文的方式理解.     首先需要在起始布局activity_main.xml文件中设置三个Button按钮,并分别设置点击事件,并与MainActivity相结合     一:ArrayAdapter:简单易用的Adapter,通常用于将数组或者List集合的多个值包装成多个列表项. 1.声明arrayadapter的第一步:创建activity

设计模式--适配器(Adapter)模式

今天学习另一个设计模式,适配器(Adapter)模式,这是一个共同方向,但有特殊要求,就应用到此设计模式.写到这里,想起很久以前,有写过一篇<ASP.NET的适配器设计模式(Adapter)>http://www.cnblogs.com/insus/archive/2013/02/04/2891426.html ,但是似乎没有适配器的味道. 比如一个系统,开发时设计好各种权限,但某一种,客户提出要求,需要一个特殊的权限来操作.只好开发一个适配器来让其有这个特殊操作权限. 用代码来举例吧. 先定

设计模式学习心得&lt;适配器 Adapter&gt;

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能. 概述 意图 将一个类的接口转换成客户希望的另外一个接口. 适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 主要解决 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的. 何时使用 系统需要使用现有的类,而此类

设计模式模式适配器(Adapter)摘录

23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助建立一个系统,是独立于如何.这是一个这些对象和陈述的组合.创建使用继承一个类架构更改实例,一个对象类型模型的建立也将委托实例化一个对象. 断出现的主旋律.第一,它们都将关于该系统使用哪些详细的类的信息封装起来. 第二.它们隐藏了这些类的实例是怎样被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口. 因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以及何时创建这些方面给予了

java演示适配器(adapter)模式

为什么要使用模式: 模式是一种做事的一种方法,也即实现某个目标的途径,或者技术. adapter模式的宗旨就是,保留现有类所提供的服务,向客户提供接口,以满足客户的需求. 类适配器:客户端定义了接口并实现了这个接口,这个接口中的方法在自己的类库中有更好的实现方式,但是方法名不一样,不能为用户所用,可以定义一个类实现这个接口,这个接口中的方法可以委托给自己类库中的方法实现效果,以满足客户的需求.这种方式叫做接口适配. // 已存在的.具有特殊功能.但不符合我们既有的标准接口的类 class Ada

iOS常用设计模式——适配器Adapter

1.什么是适配器设计模式(Adapter)   (What) 适配器设计模式是一种结构型设计模式, 它的作用是把一个类的接口转换成客户希望的另外一个接口,从而使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适配器设计模式有两种实现方式:1.)通过继承来实现两个接口,叫类适配器: 2.)通过引用来避免对象适配器继承被适配对象,叫对象适配器. 图1: 类适配器的UML图 在类适配器中,Adapter与Adaptee之间的关系是继承,我们通过继承来实现对Adaptee中+ specific