android中自定义adapter,Android开发之自定义Adapter

AAffA0nNPuCLAAAAAElFTkSuQmCC

开发步骤:

一、ListView的每个Item展示效果的布局文件

如图明显是三个TextView和一个ImageView(可以动态生成)

二、总的布局文件

如图上面是一个TextView(全球最著名的人物列表),下面是一个ListView

三、编写自己的MyAdapter,继承BaseAdapter

public class MyAdapter extends BaseAdapter {

private List person; // 要显示的数据 通过Activity传过来

Context context; // 上下文

public MyAdapter(Context context, List person) {

this.person = person;

this.context = context;

}

@Override

public int getCount() // 获取数据集合的大小 确定listView的条目

{

return (person == null) ? 0 : person.size();

}

@Override

public Object getItem(int position) // 获取position位置上的数据

{

return person.get(position);

}

@Override

public long getItemId(int position) // 获取position位置的数据的ID

{

return position;

}

public class ViewHolder // ListView中每一个Item的View组件的结构

{

TextView textViewItem01;

TextView textViewItem02;

TextView textViewItem03;

ImageView imageView;

}

// 获取一个View展示集合中指定位置的数据

// Android ListView中每显示出一条item的时候,都会自动的调用BaseAdapter.getView(int position,

// View convertView, ViewGroup parent)方法

@Override

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

ViewHolder viewHolder = null;

if (null == convertView) {

convertView = LayoutInflater.from(context).inflate(R.layout.list_view_02, null); // 通过布局文件构造一个View

viewHolder = new ViewHolder(); // 每一个Item的View的结构

viewHolder.textViewItem01 = (TextView) convertView.findViewById(R.id.listView01Item01);

viewHolder.textViewItem02 = (TextView) convertView.findViewById(R.id.listView01Item02);

viewHolder.textViewItem03 = (TextView) convertView.findViewById(R.id.listView01Item03);

// 动态增加1个ImageView

viewHolder.imageView = new ImageView(context);

LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,

LinearLayout.LayoutParams.WRAP_CONTENT);

mParams.gravity = Gravity.CENTER;

mParams.width = 50;

viewHolder.imageView.setLayoutParams(mParams);

// 这个ImageView放到ListView的第2列之后

((LinearLayout) convertView).addView(viewHolder.imageView, 2);

convertView.setTag(viewHolder);

} else {

viewHolder = (ViewHolder) convertView.getTag();

}

Person person = (Person) getItem(position);

// 把 viewHolder 中的组件初始化或者重定义

viewHolder.textViewItem01.setText(String.valueOf(person.id));

viewHolder.textViewItem02.setText(person.name);

viewHolder.textViewItem03.setText(person.address);

viewHolder.imageView.setImageResource(person.photo);

return convertView;

}

}

convertView不为空的时候,可以简化布局操作,不用再执行上述蓝色部分的代码,直接可以get出来数据。

view 的 setTag()/getTag() 这一对方法,用来设置/提取 view 的追加数据,可是任意类型。

该方法的意义:当convertView不为空的时候,可以简化布局操作,不用再执行上述蓝色部分的代码,而直接可以get出来数据。

public abstract View getView (int position, View convertView, ViewGroup parent)

函数功能

Get a View that displays the data at the specified position in the data set.

You can either create a View manually or inflate it from an XML layout file.

When the View is inflated, the parent View (GridView, ListView...) will apply default layout parameters unless you use inflate(int, android.view.ViewGroup, boolean) to specify a root view and to prevent attachment to the root.

返回值

A View corresponding to the data at the specified position.

四、Activity中设置好数据,并通过setAdapter(adapter)来显示ListView

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值