public class PlayAdapter extends BaseAdapter {
/**
* 标题的item
*/
public static final int ITEM_TITLE = 0;
/**
* 二级菜单的item
*/
public static final int ITEM_INTRODUCE = 1;
private List<ViewItem> mList;
private Context context; private LayoutInflater inflater;
public PlayAdapter(Context context, List<ViewItem> mList) {
this.context = context;
this.mList = mList;
inflater = LayoutInflater.from(context);
} @Override
public int getCount() {
// TODO Auto-generated method stub
System.out.println("mList.size()" + mList.size());
return mList.size();
} @Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return mList.get(arg0);
}
//返回 代表某一个样式 的 数值
@Override
public int getItemViewType(int position) { //返回类型
// TODO Auto-generated method stub
return mList.get(position).type;
} //两个样式 返回2
@Override
public int getViewTypeCount() { //不同的布局共2 个
// TODO Auto-generated method stub
return 2;
} @Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position); //取得类型
Holder1 holder1 = null;
Holder2 holder2 = null;
System.out.println("getView " + position + " " + convertView
+ " type = " + type);
if (convertView == null) {
//选择某一个样式。。
switch (type) {
case ITEM_TITLE: //一级菜单
convertView = inflater.inflate(R.layout.play_item_title, null);
holder1 = new Holder1(convertView);
holder1.play_title.setText(mList.get(position).name);
convertView.setTag(holder1);
break;
case ITEM_INTRODUCE: //二级菜单
convertView = inflater.inflate(R.layout.paly_item_introduce,null);
holder2 = new Holder2(convertView);
holder2.play_introduce_title
.setText(mList.get(position).address);
convertView.setTag(holder2);
break;
default:
break;
}
} else { //复用view
switch (type) { ////取得类型
case ITEM_TITLE:
holder1 = (Holder1) convertView.getTag();
holder1.play_title.setText(mList.get(position).name);
break;
case ITEM_INTRODUCE:
holder2 = (Holder2) convertView.getTag();
holder2.play_introduce_title
.setText(mList.get(position).address);
break; default:
break;
} } return convertView;
} // 两个样式 两个holder。100就写100holder。。当然你何以把他抽离出来这里先只为了说明问题
class Holder1 {
TextView play_title; Holder1(View view) {
play_title = (TextView) view.findViewById(R.id.play_title);
} }
class Holder2 {
TextView play_introduce_title;
ImageView play_iv;
Holder2(View view) {
play_introduce_title = (TextView) view.findViewById(R.id.play_introduce_title);
play_iv = (ImageView) view.findViewById(R.id.play_iv);
}
} }

ListView里面adapter的不同分类的item的更多相关文章

  1. Android listview与adapter用法

    listview与adapter用法 博客分类: android   一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...

  2. listview与adapter用法

    Android listview与adapter用法 listview与adapter用法 博客分类: android   一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用 ...

  3. ListView和Adapter数据适配器的简单介绍

    ListView 显示大量相同格式数据 常用属性: listSelector            listView每项在选中.按下等不同状态时的Drawable divider            ...

  4. ListView和Adapter的配合使用以及Adapter的重写

    ListView和Adapter的使用   首先介绍一下ListView是Android开发过程中较为常见的组件之一,它将数据以列表的形式展现出来.一般而言,一个ListView由以下三个元素组成: ...

  5. ListView 和 Adapter用法

    一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView就是实现这个功能的.第二点也不难做到,在后面的学习中读者会发现,这非常 ...

  6. ListView及Adapter的使用

    一.使用ArrayAdapter 其中ArrayAdapter的构造函数有如下几个,其中resource是指每个列表项的布局文件,objects是指列表项的数据源,此处通常指一个数组 ArrayAda ...

  7. android 开发之 ListView 与Adapter 应用实践

    在开发android中,ListView 的应用显得非常频繁,只要需要显示列表展示的应用,可以说是必不可少,下面是记录开发中应用到ListView与Adapter 使用的实例: ListView 所在 ...

  8. [Android] Android RecycleView和ListView 自定义Adapter封装类

    在网上查看了很多对应 Android RecycleView和ListView 自定义Adapter封装类 的文章,主要存在几个问题: 一).网上代码一大抄,复制来复制去,大部分都运行不起来,或者 格 ...

  9. 超简便的ListView中Adapter的写法

    对于 ListView 的使用,他有两个重点的部分,一个是下拉刷新和加载更多,这个今天我们不讲,另外一个是 BaseAdapter 的使用,这个是今天的主角,BaseAdapter 中又有 ViewH ...

随机推荐

  1. 委托+内置委托方法+多播委托+lambda表达式+事件

    委托概念:如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托: 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字 ...

  2. CruiseControl初探

    一.背景 CruiseControl从<项目自动化之道>这本书中了解到,然后又从网上查资料做了一定尝试.同时,项目持续集成这部分我也计划在自己参与的项目上先试点实行,才有了这篇文章. 二. ...

  3. 【.Net】关于内存缓存的一点记录

    引言 最近看了内存缓存的一些介绍和用法,在此做个简单记录. MemoryCache 类 MemoryCache 类是.Net 4.0推出的类库,主要是为了方便在Winform和Wpf中构建缓存框架的. ...

  4. Idea_学习_09_Idea 方法自动生成参数默认名

    一.方法 1.快捷键 生成方法后,还空着参数,可以使用 ctrl + alt + 空格 ,列出参数,然后选择参数即可. 2.使用插件 二.参考资料 1.Intellij Idea 方法自动生成参数默认 ...

  5. 条款36:绝对不要重新定义,继承而来的non-virtual函数

    重新定义一个继承而来的non-virtual函数可能会使得导致当函数被调用的时候,被调用的函数不是取决于调用的函数究竟属于的对象,而是取决于调用函数的指针或者引用的类型. 所以一般的说主要有两种观点在 ...

  6. 进程、线程、ThreadLlocal

    1.线程是最小的执行单位,而进程中至少一个线程组:如果调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间 Unix/Linux操作系统提供了一个fork()系统调用,它非常 ...

  7. GET请求与POST请求区别

    GET请求与POST请求区别 a:语义: GET:客户端想获取服务器资源 POST:客户端想传递数据给服务器 b:安全级: GET:不安全 POST:不安全 c:数据长度 GET:客户端发送数据最长1 ...

  8. 远程激活.NET REFLECTOR(不能断网)

    由于是远程连接的服务器,使用.Net Reflector注册机激活时,不能断网. 如何禁止Reflector连接她的激活服务器,可进行如下操作: 1.添加hosts: 0.0.0.0 red-gate ...

  9. django的related_name

    转:https://segmentfault.com/q/1010000003705677 就是一个反向关联的属性,比方说model里面定义两个class,一个是A,一个是B class A(Mode ...

  10. boost_1.61.0编译安装

    1.下载源码boost_1_61_0.zip 2.进入目录 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shor ...