ListView可以显示多种类型的条目布局,这里写显示两种布局的情况,其他类似.

1. 这是MainActivity,MainActivity的布局就是一个ListView,太简单了这里就不写了,直接来到MainActivity,如下:

 public class MainActivity extends Activity {

     private ListView lv;
private List<People> lists; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv); lists=new ArrayList<>();
//0代表学生,1代表老师
People people1 = new People(0, "10");//类型,钱
People people2 = new People(1, "100");
People people3 = new People(1, "100");
People people4 = new People(0, "10");
lists.add(people1);
lists.add(people2);
lists.add(people3);
lists.add(people4); lv.setAdapter(new MyAdapter());
} class MyAdapter extends BaseAdapter{ @Override
public int getCount() {
return lists.size();
} @Override
public Object getItem(int i) {
return lists.get(i );
} @Override
public long getItemId(int i) {
return i;
} @Override
public int getItemViewType(int position) {
if(lists.get(position).getType()==0){//当前JavaBean对象的类型
return 0;//学生类型
}else if(lists.get(position).getType()==1){
return 1;//老师类型
}else {
return 100;
} } @Override
public int getViewTypeCount() {
return 2;//总共有两个类型
} @Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
int currentType = getItemViewType(position);//当前类型
if(currentType==0){//学生类型
StudentViewHolder studentViewHolder;
if(convertView==null){
studentViewHolder=new StudentViewHolder();
convertView=View.inflate(MainActivity.this,R.layout.item_lv_student,null);
studentViewHolder.tv0= (TextView) convertView.findViewById(R.id.num_money_stu);
convertView.setTag(studentViewHolder);
}else{
studentViewHolder= (StudentViewHolder) convertView.getTag();
}
//数据填充
studentViewHolder.tv0.setText(lists.get(position).getMoney());
}else if(currentType==1){//老师类型
TeacherViewHolder teacherViewHolder;
if(convertView==null){
teacherViewHolder=new TeacherViewHolder();
convertView=View.inflate(MainActivity.this,R.layout.item_lv_teacher,null);
teacherViewHolder.tv1= (TextView) convertView.findViewById(R.id.num_money_teacher);
convertView.setTag(teacherViewHolder);
}else{
teacherViewHolder= (TeacherViewHolder) convertView.getTag();
}
//数据填充
teacherViewHolder.tv1.setText(lists.get(position).getMoney());
} return convertView; }
}
/**学生item的Holder*/
class StudentViewHolder {
TextView tv0;
}
/**老师item的Holder*/
class TeacherViewHolder {
TextView tv1;
}
}

2. 上面使用到的bean类如下:

 /**
* 区分 学生 和 老师
* type = 1 老师
* type = 0 学生
*/
public class People {
/**类型,0表示学生,1表示老师**/
public int type;
public String money; public People(int type, String money) {
this.type = type;
this.money = money;
} public int getType() {
return type;
} public void setType(int type) {
this.type = type;
} public String getMoney() {
return money;
} public void setMoney(String money) {
this.money = money;
}
}

3. ListView的Item的布局如下:

(1)学生Item布局,如下:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="#00ff00"
> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="学生的钱:" /> <TextView
android:id="@+id/num_money_stu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10" /> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="学生布局"
android:id="@+id/button" /> </LinearLayout>

(2)老师item的布局,如下:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="#f9a5b2"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="老师的钱:"/>
<TextView
android:id="@+id/num_money_teacher"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="100"/>
</LinearLayout>

4. 结果图:

Android进阶笔记10:ListView篇之ListView显示多种类型的条目(item)的更多相关文章

  1. Android进阶笔记11:ListView篇之ListView显示多种类型的条目(item)

    ListView可以显示多种类型的条目布局,这里写显示两种布局的情况,其他类似. 1. 这是MainActivity,MainActivity的布局就是一个ListView,太简单了这里就不写了,直接 ...

  2. Android进阶笔记10:Android 万能适配器

    1. Android 万能适配器      项目中Listview GridView几乎是必用的组件,Android也提供一套机制,为这些控件绑定数据,那就是Adapter.用起来虽然还不错,但每次都 ...

  3. ListView显示多种类型的item

    ListView可以显示多种类型的条目布局,这里写显示两种布局的情况,其他类似 这是MainActivity:,MainActivity的布局就是一个ListView public class Mai ...

  4. Android进阶笔记:Messenger源码详解

    Messenger可以理解为一个是用于发送消息的一个类用法也很多,这里主要分析一下再跨进程的情况下Messenger的实现流程与源码分析.相信结合前面两篇关于aidl解析文章能够更好的对aidl有一个 ...

  5. Android进阶笔记:AIDL内部实现详解 (二)

    接着上一篇分析的aidl的流程解析.知道了aidl主要就是利用Ibinder来实现跨进程通信的.既然是通过对Binder各种方法的封装,那也可以不使用aidl自己通过Binder来实现跨进程通讯.那么 ...

  6. Android进阶笔记14:ListView篇之ListView性能优化

    1. 首先思考一个问题ListView如何才能提高效率 ? 当convertView为空时候,用setTag()方法为每个View绑定一个存放控件的ViewHolder对象.当convertView不 ...

  7. Android进阶笔记11:ListView篇之ListView性能优化

    1. 首先思考一个问题ListView如何才能提高效率 ? 当convertView为空时候,用setTag()方法为每个View绑定一个存放控件的ViewHolder对象.当convertView不 ...

  8. Android进阶笔记16:ListView篇之ListView刷新显示(全局 和 局部)

    一.ListView内容变化后,动态刷新的步骤(全局刷新): (1)更新适配器Adapter数据源:(不要使用匿名内部类) (2)调用适配器Adapter的刷新方法notifyDataSetChang ...

  9. Android进阶笔记13:ListView篇之ListView刷新显示(全局 和 局部)

    一.ListView内容变化后,动态刷新的步骤(全局刷新): (1)更新适配器Adapter数据源:(不要使用匿名内部类) (2)调用适配器Adapter的刷新方法notifyDataSetChang ...

随机推荐

  1. Notepad++编译和运行Java

    首先要让Notepad++编译和运行Java,前提是电脑里已经配置好了Java的环境(这里可以参考我博客里关于Java环境配置的那篇随笔). 在Notepad++上面的选项栏中找到 插件---> ...

  2. Android报错

      Error:Execution failed for task ':app:processDebugResources'. > com.android.ide.common.process. ...

  3. linux 7.0+救援模式

    输入“e”进入GRUB页面! 定位到ro 然后修改ro为rw,并添加如下红框内的命令行! 使用下面的提示使用“Ctrl-x”start!!! 进入系统后,其实只是进入了一个安全模式下的内存系统,并不是 ...

  4. oracle12C--DG搭建配置

    一,主库前期操作 搭建的话和11g差不多,点点点. 两台服务器,一台主库,一台从库 01,配置主库hosts cat /etc/hosts 192.168.0.31 node12c01 192.168 ...

  5. socket基础篇

    server_scoket.py #!/usr/bin/env python3.5 # -*- coding:utf-8 -*- import socket import subprocess ip_ ...

  6. (转)Linux SSH批量分发管理

    Linux SSH批量分发管理 原文:http://blog.51cto.com/chenfage/1831166 第1章 SSH服务基础介绍 1.1 SSH服务 1.1.1SSH介绍 SSH是Sec ...

  7. Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的

    转:http://www.cnblogs.com/2gua/ Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法 ...

  8. hihoCoder题目之Magic Box

    #include <iostream> #include <cmath> #include <cstdio> using namespace std; void s ...

  9. 深入理解JavaScript系列(8):S.O.L.I.D五大原则之里氏替换原则LSP

    前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第3篇,里氏替换原则LSP(The Liskov Substitution Principle ). 英文原文:http ...

  10. Java Socket, DatagramSocket, ServerSocketChannel io代码跟踪

    Java Socket, DatagramSocket, ServerSocketChannel这三个分别对应了,TCP, udp, NIO通信API封装.JDK封装了,想跟下代码,看下具体最后是怎么 ...