Adapter 是用来帮助填充数据的中间桥梁,简单点说就是:将各种数据以合适的形式显示到 view 上,提供给用户看!
关系图解析:
- Model:通常可以理解为数据,负责执行程序的核心运算与判断逻辑,通过 view 获得用户输入的数据,然后根据从数据库查询相关的信息,最后进行运算和判断,再将得到的结果交给 view 来显示
- view:用户的操作接口,说白了就是 GUI,应该使用哪种接口组件,组件间的排列位置与顺序都需要设计
- Controller:控制器,作为 model 与 view 之间的枢纽,负责控制程序的执行流程以及对象之间的一个互动
- 而这个 Adapter 则是中间的这个 Controller 的部分: Model(数据) ---> Controller(以什么方式显示到)---> View(用户界面)
继承结构图:
- BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
- ArrayAdapter支持泛型操作,最为简单,只能展示一行字。
- SimpleAdapter有最好的扩充性,可以自定义出各种效果。
- SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。
1、ArrayAdapter的参数说明:
第一个参数:context上下文对象
第二个参数:每一个item的样式,可以使用系统提供,也可以自定义就是一个TextView
第三个参数:数据源,要显示的数据
系统提供的item的样式,可以试一试
simple_list_item1:单独的一行文本框
simple_list_item2:有两个文本框组成
simple_list_item_checked每项都是由一个已选中的列表项
simple_list_item_multiple_choice:都带有一个复选框
simple_list_item_single_choice:都带有一个单选框
2.simpleAdapter中五个参数的
第一个参数:上下文对象
第二个参数:数据源是含有Map的一个集合
第三个参数:每一个item的布局文件
第四个参数:new String[]{}数组,数组的里面的每一项要与第二个参数中的存入map集合的的key值一样,一一对应
第五个参数:new int[]{}数组,数组里面的第三个参数中的item里面的控件id。
其他
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity_ArrayAdapter extends Activity {
private ListView lv_main;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_main = (ListView) findViewById(R.id.lv_main);
//准备集合数据
String[] data = {"A", "B", "C", "D", "E", "F","G", "H", "I", "J", "K", "L"};
//准备ArrayAdapter对象
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.item_array_adapter, data);
//设置Adapter显示列表
lv_main.setAdapter(adapter);
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class MainActivity_SimpleAdapter extends Activity {
private ListView lv_main;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_main = (ListView) findViewById(R.id.lv_main);
//准备集合数据
List<Map<String, Object>> data = new ArrayList<Map<String,Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("icon", R.drawable.f1);
map.put("name", "name--1");
map.put("content", "content--1");
data.add(map);
map = new HashMap<String, Object>();
map.put("icon", R.drawable.f2);
map.put("name", "name--2");
map.put("content", "content--2");
data.add(map);
map = new HashMap<String, Object>();
map.put("icon", R.drawable.f3);
map.put("name", "name--3");
map.put("content", "content--3");
data.add(map);
map = new HashMap<String, Object>();
map.put("icon", R.drawable.f4);
map.put("name", "name--4");
map.put("content", "content--4");
data.add(map);
map = new HashMap<String, Object>();
map.put("icon", R.drawable.f5);
map.put("name", "name--5");
map.put("content", "content--5");
data.add(map);
map = new HashMap<String, Object>();
map.put("icon", R.drawable.f6);
map.put("name", "name--6");
map.put("content", "content--6");
data.add(map);
map = new HashMap<String, Object>();
map.put("icon", R.drawable.f7);
map.put("name", "name--7");
map.put("content", "content--7");
data.add(map);
map = new HashMap<String, Object>();
map.put("icon", R.drawable.f8);
map.put("name", "name--8");
map.put("content", "content--8");
data.add(map);
map = new HashMap<String, Object>();
map.put("icon", R.drawable.f9);
map.put("name", "name--9");
map.put("content", "content--9");
data.add(map);
map = new HashMap<String, Object>();
map.put("icon", R.drawable.f10);
map.put("name", "name--10");
map.put("content", "content--10");
data.add(map);
//map对象中的key的数组, 用于得到对应的value
String[] from = {"icon", "name", "content"};
//Item布局文件中的子view的id的数组
int[] to = {R.id.iv_item_icon, R.id.tv_item_name, R.id.tv_item_content};
//准备SimpleAdapter对象
SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item_simple_adapter, from, to);
//设置Adapter显示列表
lv_main.setAdapter(adapter);
}
}
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private ListView lv_main;
private List<ShopInfo> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_main = (ListView) findViewById(R.id.lv_main);
//准备集合数据
data = new ArrayList<ShopInfo>();
data.add(new ShopInfo(R.drawable.f1, "name----1", "content----1"));
data.add(new ShopInfo(R.drawable.f2, "name----2", "content----2"));
data.add(new ShopInfo(R.drawable.f3, "name----3", "content----3"));
data.add(new ShopInfo(R.drawable.f4, "name----4", "content----4"));
data.add(new ShopInfo(R.drawable.f5, "name----5", "content----5"));
data.add(new ShopInfo(R.drawable.f6, "name----6", "content----6"));
data.add(new ShopInfo(R.drawable.f7, "name----7", "content----7"));
data.add(new ShopInfo(R.drawable.f8, "name----8", "content----8"));
data.add(new ShopInfo(R.drawable.f9, "name----9", "content----9"));
data.add(new ShopInfo(R.drawable.f10, "name----10", "content----10"));
//准备BaseAdapter对象
MyAdapter adapter = new MyAdapter();
//设置Adapter显示列表
lv_main.setAdapter(adapter);
}
class MyAdapter extends BaseAdapter {
//返回集合数据的数量
@Override
public int getCount() {
Log.e("TAG", "getCount()");
return data.size();
}
//返回指定下标对应的数据对象
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
/**
* 返回指定下标所对应的item的View对象
* position : 下标
* convertView : 可复用的缓存Item视图对象, 前n+1个为null
* parent : ListView对象
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//Log.e("TAG", "getView() position="+position+" convertView="+convertView);
//如果没有复用的
if(convertView==null) {
Log.e("TAG", "getView() position="+position+" convertView="+convertView);
//加载item的布局, 得到View对象
convertView = View.inflate(MainActivity.this, R.layout.item_simple_adapter, null);
}
//根据position设置对应的数据
//得到当前行的数据对象
ShopInfo shopInfo = data.get(position);
//得到子View对象
ImageView imageView = (ImageView) convertView.findViewById(R.id.iv_item_icon);
TextView nameTV = (TextView) convertView.findViewById(R.id.tv_item_name);
TextView contentTV = (TextView) convertView.findViewById(R.id.tv_item_content);
//设置数据
imageView.setImageResource(shopInfo.getIcon());
nameTV.setText(shopInfo.getName());
contentTV.setText(shopInfo.getContent());
return convertView;
}
}
}
ShopInfo :
/**
* 每行Item的数据信息封装类
* @author 张晓飞
*
*/
public class ShopInfo {
private int icon;
private String name;
private String content;
public ShopInfo(int icon, String name, String content) {
super();
this.icon = icon;
this.name = name;
this.content = content;
}
public ShopInfo() {
super();
}
public int getIcon() {
return icon;
}
public void setIcon(int icon) {
this.icon = icon;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "ShopInfo [icon=" + icon + ", name=" + name + ", content="
+ content + "]";
} }