package com.danxingxi.myspinner;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MySpinnerAdapter extends BaseAdapter {
private Context mContext;
private String[] mData; //这里我们传进来的是一个数组
public MySpinnerAdapter(Context mContext,String[] mData)
{
this.mContext = mContext;
this.mData = mData;
}
@Override
public int getCount() {
return mData.length; //返回数组的长度
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
/*
* getView是主要要重写的方法,返回的是一个view对象
*
* position就是你选择的 item的第几条从0开始
* convertView就是item上的布局layout或者组件
* ViewGroup parent就是你设置adapter的那个组件里面封装一个viewGroup用来盛放item,一般很少使用
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//首相创建一个布局映射器
System.out.println("==============>>"+position);
LayoutInflater mInflater = LayoutInflater.from(mContext);
//利用布局映射器得到item的布局文件
ViewHolder holder;
if(convertView == null) //如果item的布局文件为空我们就为其创建一个
{
convertView = mInflater.inflate(R.layout.myspinner_item, null);
/**
* 因为我们是把vlist2.xml的元素抽象出来成为一个类ViewHolder,
* 用了setTag,这个标签就是ViewHolder实例化后对象的一个属性。
* 我们之后对于ViewHolder实例化的对象holder的操作,
* 都会因为java的引用机制而一直存活并改变convertView的内容,
* 而不是每次都是去new一个。我们就这样达到的重用——我希望我说清楚了
*/
//为listview的每一个小项设置一个tag标记,当其被listview滚动到上面之后,
//可以根据其tag将内存空间分给其他Item,实现重用
holder = new ViewHolder();
convertView.setTag(holder);
}
else //如果item的布局文件不为空,则提取tag标签
{
holder = (ViewHolder) convertView.getTag();
}
/**
* 程序运行到这里我们的convertView就创建出来了,并且拥有了viewHolder对象,接下来我们将viewholder
* 接下来我们将viewholder对象中的变量初始化并赋值
*/
//找到id
holder.tv = (TextView) convertView.findViewById(R.id.tv);
//赋值
holder.tv.setText(mData[position]);
return convertView;
}
class ViewHolder //数组里的具体内容转换到view控件的时候要使用
{
private TextView tv;
}
}
Android自定义Adapter适配器
最新推荐文章于 2024-04-29 21:46:13 发布