您的位置:首页 > 其它

BaseAdapter的使用步骤以及setTag和getTag的作用

2015-08-04 16:10 513 查看
<span style="font-size:18px;">package com.test1;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.example.mywork0803.R;

public class BaseAdapter_Main extends Activity {

// 定义初始化资源
private int[] image = { R.drawable.img_1, R.drawable.img_2,
R.drawable.img_3 };
private String[] name = { "张三", "李四", "王五" };
private int[] age = { 12, 33, 23 };

ListView listView;
MybaseAdapter mybaseAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.baseadapter_layout);
// 获取ListView的id
listView = (ListView) findViewById(R.id.my_list);
// 初始化适配器
mybaseAdapter = new MybaseAdapter(this);
// 添加适配器
listView.setAdapter(mybaseAdapter);
}

// 继承BaseAdapter
public class MybaseAdapter extends BaseAdapter {

private LayoutInflater minflater;

// 带参构造函数,将context传进来
public MybaseAdapter(Context context) {
// 填充布局
this.minflater = LayoutInflater.from(context);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return image.length;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
// 防止内存溢出
// 判断concertView是否存在
if (convertView == null) {
// 将布局填充进来
convertView = minflater.inflate(R.layout.base_litem, null);
viewHolder = new ViewHolder();
// viewHolder打上标签
convertView.setTag(viewHolder);
} else {
// concertView存在则将view重新赋给viewHolder
viewHolder = (ViewHolder) convertView.getTag();
}
// 获取convertView视图下的布局id
viewHolder.imageView = (ImageView) convertView
.findViewById(R.id.img_view);
viewHolder.imageView.setImageResource(image[position]);

viewHolder.txt_name = (TextView) convertView
.findViewById(R.id.txt_name);
viewHolder.txt_name.setText(" " + name[position]);

viewHolder.txt_age = (TextView) convertView
.findViewById(R.id.txt_age);
viewHolder.txt_age.setText(" " + age[position]);

// 返回view
return convertView;
}
}
// 创建ViewHolder对象,减少内存的消耗
public class ViewHolder {
ImageView imageView;
TextView txt_name;
TextView txt_age;
}
}
</span>

setTag是给View对象的一个标签,标签可以是任何内容,我们这里把他设置成了一个对象,因为我们是把xml的元素抽象出来成为一个类ViewHolder,用了setTag,这个标签就是ViewHolder实例化后对象的一个属性。我们之后对于ViewHolder实例化的对象holder的操作,都会因为java的引用机制而一直存活并改变convertView的内容,而不是每次都是去new一个。

由于setTag和getTag设置的是一个Object对象,可能会出现类的转换异常

不过,android4.0以后,有一个更好的方法:setTag(int key, Object tag)可以通过类似<k,v>键值对的方式存取。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息