自定义一个适配器

来源:互联网 发布:一般纳税人 报税软件 编辑:程序博客网 时间:2024/06/05 08:47

1.定义一个适配器extends BaseAdapter

public class MusicAdapter extends BaseAdapter{

2.添加相应的属性

private LayoutInflater mInflater;private Context mContext;private int mResouce;private List<Music> mObjects;

3.重写BaseAdapter中的方法

public MusicAdapter(Context context,int resource,List<Music> musics) {   mContext=context;   //获得一个一个系统服务(此服务对应的对象可以解析xml,并通过反射构建xml对应的元素对象)   mInflater=(LayoutInflater)    mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   mResouce=resource;   mObjects=musics;}/**返回数据集中item数据的个数*/@Overridepublic int getCount() {//重要return mObjects.size();}/**返回对应位置的item中的数据*/@Overridepublic Object getItem(int position) {return mObjects.get(position);}/**暂且直接返回position*/@Overridepublic long getItemId(int position) {return position;}/**此方法用于构建item,每显示一个item都要执行一次此方法*/@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//重要Log.i("TAG", "convertView="+convertView);Log.i("TAG", "parent="+parent);//1.item view (饺子皮,饺子皮的样子由mResouce决定)    View v=null;    ViewHolder vHolder=null;    if(convertView==null){//页面启动时初始值为空//inflate方法返回的类型由mResouce资源文件的根元素决定//1)根据资源id找到对应的xml布局资源//2)底层会借助pull解析解析xml资源//3)底层会通过反射构建xml资源中的元素对象//4)inflate方法的返回值为mResource资源文件的根元素对象v=mInflater.inflate(mResouce,parent,false);vHolder=new ViewHolder();vHolder.sectionTv=(TextView) v.findViewById(R.id.sectionId);vHolder.titleTv=(TextView) v.findViewById(android.R.id.text1);;vHolder.createTv=(TextView) v.findViewById(android.R.id.text2);;v.setTag(vHolder);//建立关联:相当于一个教室一个座位表    }else{v=convertView;//可重用的item view对象vHolder=(ViewHolder) v.getTag();}//2.item data (饺子馅)Music m=mObjects.get(position);//3.bind view (包饺子,对号入座,将饺子馅放到饺子皮上)vHolder.sectionTv.setText(m.getTitle().substring(0, 1).toUpperCase());vHolder.titleTv.setText(m.getTitle());vHolder.createTv.setText(m.getCreated());//4.设置item view背景(根据选中位置的不同进行设置)int checked=((ListView)parent).getCheckedItemPosition();Log.i("TAG", "checked="+checked);if(position==checked){v.setBackgroundColor(Color.YELLOW);}else{v.setBackgroundColor(Color.WHITE);}//5.显示或隐藏item对应的sectionint section=getSectionForPosition(position);int minPos=getPositionForSection(section);if(position==minPos){vHolder.sectionTv.setVisibility(View.VISIBLE);}else{    vHolder.sectionTv.setVisibility(View.GONE);}return v;//包好的饺子}
4.里面有引用的其他部分的方法或者类

/**通过此方法获得每个位置的section的ascii值*/public int getSectionForPosition(int position){return mObjects.get(position).getTitle().toUpperCase().charAt(0);}/***通过此方法获得section在列表中的最小位置*/public int getPositionForSection(int section){//1.遍历所有位置(0~getCount()-1)for(int i=0;i<getCount();i++){ int findSec=getSectionForPosition(i); if(findSec==section){//2.找到最小位置 return i; }}return -1;}class ViewHolder{TextView sectionTv;TextView titleTv;TextView createTv;}



0 0
原创粉丝点击