ListView_自定义BaseAdapter适配器_自定义多彩条目_1

来源:互联网 发布:淘宝买家改评价的链接 编辑:程序博客网 时间:2024/06/06 12:33
 在Android众多的控件中,ListView可谓是用的最多的控件之一,也是扩展性最强的控件。
    控件在布局中的定义相对简单,在此就不再赘述了。
    下面我们来开始我们的ListView之旅。。。
    首先,我们定义数据源。。。

private ListView listView;
// 定义数据源
private List<Map<String, Object>> list;
private String[] title = new String[] { "锁定手机", "手机杀毒", "解锁手机", "手机上网",
"我的文档", "手机导航", "手机设置", "消息提示", "Emails" };
private int[] images = new int[] { R.drawable.img01, R.drawable.img02,
R.drawable.img03, R.drawable.img04, R.drawable.img05,
R.drawable.img06, R.drawable.img03a, R.drawable.img07,
R.drawable.email };
// 定义适配器
private MyAdapter myAdapter;
    其中,List<Map<String,Object>>是用来为适配器提供数据支持的,String[] title和int[] images分别为适配器提供字符串和图片的资源支持
// 初始化数据
private void initData() {
list = new ArrayList<Map<String, Object>>();
for (int i = 0; i < title.length; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", title[i]);
map.put("images", images[i]);
map.put("descripe", "专门处理" + title[i]
+ "相关功能,采用国内顶尖技术和开发团队制作,给用户完美体验!");
list.add(map);
}
}
    在上面的代码总,我们将之前所准备的数据放到list中,待会作为参数传到自定义的Adapter中去。
    现在,万事具备,只欠东风,我们开始自定义适配器
public class MyAdapter extends BaseAdapter {
//定义一个List接受传过来的数据
private List<Map<String, Object>> list;
//定义一个 上下文
Context context;
//定义一个LayoutInflater来获取系统资源文件
LayoutInflater inflater;
//构造方法 获取资源 获取上下文
public MyAdapter(List<Map<String, Object>> list,Context context) {
this.list = list;
this.context = context;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return list.size();
}
 
@Override
public Object getItem(int arg0) {
return list.get(arg0);
}
 
@Override
public long getItemId(int arg0) {
return arg0;
}
 
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
//定义一个ViewHolder 作为封装控件的容器 (反正我是这么理解的)
ViewHolder holder = null;
if(arg1 == null){
holder = new ViewHolder();
//获取资源布局文件
arg1 = inflater.inflate(R.layout.listview_item, null);
//获取资源文件中的控件
holder.iv_1 = (ImageView) arg1.findViewById(R.id.iv_1);
holder.tv_title = (TextView) arg1.findViewById(R.id.tv_title);
holder.iv_2 = (ImageView) arg1.findViewById(R.id.iv_2);
holder.tv_des = (TextView) arg1.findViewById(R.id.tv_des);
//这个不知道就没法玩了 但就是这样玩的
arg1.setTag(holder);
}else{
holder = (ViewHolder) arg1.getTag();
}
//为获取到的控件设置资源,让其有东西可以用来显示
holder.iv_1.setBackgroundResource(Integer.parseInt(list.get(arg0).get("images").toString()));
holder.iv_2.setBackgroundResource(Integer.parseInt(list.get(arg0).get("images").toString()));
holder.tv_title.setText(list.get(arg0).get("title").toString());
holder.tv_des.setText(list.get(arg0).get("descripe").toString());
return arg1;
}
//自定义一个ViewHolder类
class ViewHolder{
ImageView iv_1;
TextView tv_title;
ImageView iv_2;
TextView tv_des;
}
}
    到此,所有工作就已经准备完成了,下面来看看效果


0 0