为了账号安全,请及时绑定邮箱和手机立即绑定

Android开发之自定义Adapter

标签:
Android

Android开发之自定义Adapter

开发步骤:

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

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

二、总的布局文件

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

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

public class MyAdapter extends BaseAdapter {

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

Context context; // 上下文

public MyAdapter(Context context, List<Person> 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

原文链接:http://www.apkbus.com/blog-914653-68345.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消