自定义一个适配器
来源:互联网 发布:一般纳税人 报税软件 编辑:程序博客网 时间: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
- 自定义一个适配器
- 自定义一个基本数组适配器
- 一个标准的自定义适配器的编写
- Android实现一个简单的自定义适配器
- 百度地图的一个项目,自定义适配器的一个示例
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- 自定义适配器
- TCP三次握手连接建立和四次交互关闭连接
- Nodejs 如何发送邮件(Gmail 和 126邮箱)
- Convert a Number to Hexadecimal
- 你不知道的Java学习笔记14--String类
- 使用PhotonServer和Unity建立一个棋牌类游戏实例(二)构建photon服务器与数据库的交互
- 自定义一个适配器
- jQuery ajax - ajax() 方法
- aaaa
- Mybatis总结(2)---优化配置文件
- Java学习提要——File类常见操作与目录操作
- 随机性偏差模型(DFR)介绍
- @JsonView 简单介绍
- Swift 2中的指针与Objective-C指针相互传递
- Linux DDoS 木马再度来袭