您的位置:首页 > 产品设计 > UI/UE

Android UI之Adapter

2015-08-23 20:59 465 查看
一.什么是适配器,适配器有什么用?

1、描述:适配器是视图与数据之间的桥梁,用来处理数据并将数据绑定到视图上。

2、官方:适配器是AdapterView视图(如ListView、Gallery、GridView、Spinner、AutoCompleteTextView 、ExpandableListView 等)与数据之间的桥梁,用来处理数据并将数据绑定到AdapterView上。android提供多种适配器,开发时可以针对数据源的不同采用最方便的适配器,也可以自定义适配器完成复杂功能。



二、适配器Adapter介绍

1、AdapterView对象有两个主要任务:

①在布局中显示数据

②处理用户的选择

2、主要Adapter介绍



①BaseAdapter是一个抽象类,通常自定义adapter继承于它,就具有较高的灵活性;

②ArrayAdapter支持泛型操作,最为简单,只能展示一行字。

③SimpleAdapter有最好的扩充性,可以自定义出各种效果。

④SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。

⑤BaseExpandableListAdapter可扩展的适配器基类可用于将数据绑定到支持展开/收缩功能的列表控件ExpandableListView上,继承自ListView。

二、最佳Adapter写法介绍(以实现listview为例)

package com.example.guan.listview;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.example.guan.uiwork.R;

import java.util.List;
import java.util.Map;

import butterknife.ButterKnife;
import butterknife.InjectView;

/**
* @author Guan
* @file com.example.guan.adapter
* @date 2015/8/14
* @Version 1.0
*/
public class ListViewAdapter extends BaseAdapter {

private Context mContext;
private List<Map<String, String>> mList;

public ListViewAdapter(Context context, List<Map<String, String>> list) {
this.mContext = context;
this.mList = list;
}

@Override
public int getCount() {
return mList.size();
}

@Override
public Object getItem(int position) {
return position;
}

@Override
public long getItemId(int position) {
return position;
}

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

// 2、使用了ViewHolder作为子布局的缓存,使用View的setTag方法将缓存与每个item绑定,
// 则也可以省去了findViewById的事件
ViewHolder holder;

if (convertView != null) {
// 3、获取ViewHolder
holder = (ViewHolder) convertView.getTag();
} else {
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_listview, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}

// 4、绑定数据到holder.
holder.tvIds.setText(mList.get(position).get("id"));
holder.tvNames.setText(mList.get(position).get("name"));
holder.tvAges.setText(mList.get(position).get("age"));

return convertView;
}

/**
* 1、将ViewHolder设置为static的目的是指在初始化Adapter时初始化一次这个内部类,
* 否则将会在每次创建Adapter时都要初始化一次,而这是没有必要的。
*/
static class ViewHolder {

@InjectView(R.id.tv_ids)
TextView tvIds;
@InjectView(R.id.tv_names)
TextView tvNames;
@InjectView(R.id.tv_ages)
TextView tvAges;

ViewHolder(View view) {
ButterKnife.inject(this, view);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android