Android 控件 之 Adapter

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 + "]";
} }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隔壁de小刘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值