Android Listview中显示不同的视图布局

1. 使用场景
在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能。convertView在Item为单一的同种类型布局时,能够回收并重用,但是多个Item布局类型不同时,convertView的回收和重用会出现问题。比如有些行为纯文本,有些行则是图文混排,这里纯文本行为一类布局,图文混排的行为第二类布局。单一类型的ListView很简单,下面着重介绍一下ListView包含多种类型视图布局的情形。
2.ListView包含不同Item的布局
我们需要做这些工作:
1)重写 getViewTypeCount() – 该方法返回多少个不同的布局
2)重写 getItemViewType(int) – 根据position返回相应的Item
3)根据view item的类型,在getView中创建正确的convertView
3.案例
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class listViewTest extends Activity {
/** Called when the activity is first created. */
ListView listView;
MyAdapter listAdapter;
ArrayList<String> listString;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView)this.findViewById(R.id.listview);
listString = new ArrayList<String>();
for(int i = 0 ; i < 100 ; i++)
{
listString.add(Integer.toString(i));
}
listAdapter = new MyAdapter(this);
listView.setAdapter(listAdapter);
}
class MyAdapter extends BaseAdapter{
Context mContext;
LinearLayout linearLayout = null;
LayoutInflater inflater;
TextView tex;
final int VIEW_TYPE = 3;
final int TYPE_1 = 0;
final int TYPE_2 = 1;
final int TYPE_3 = 2;
public MyAdapter(Context context) {
// TODO Auto-generated constructor stub
mContext = context;
inflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return listString.size();
}
//每个convert view都会调用此方法,获得当前所需要的view样式
@Override
public int getItemViewType(int position) {
// TODO Auto-generated method stub
int p = position%6;
if(p == 0)
return TYPE_1;
else if(p < 3)
return TYPE_2;
else if(p < 6)
return TYPE_3;
else
return TYPE_1;
}
@Override
public int getViewTypeCount() {
// TODO Auto-generated method stub
return 3;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return listString.get(arg0);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
viewHolder1 holder1 = null;
viewHolder2 holder2 = null;
viewHolder3 holder3 = null;
int type = getItemViewType(position);
//无convertView,需要new出各个控件
if(convertView == null)
{
Log.e("convertView = ", " NULL");
//按当前所需的样式,确定new的布局
switch(type)
{
case TYPE_1:
convertView = inflater.inflate(R.layout.listitem1, parent, false);
holder1 = new viewHolder1();
holder1.textView = (TextView)convertView.findViewById(R.id.textview1);
holder1.checkBox = (CheckBox)convertView.findViewById(R.id.checkbox);
Log.e("convertView = ", "NULL TYPE_1");
convertView.setTag(holder1);
break;
case TYPE_2:
convertView = inflater.inflate(R.layout.listitem2, parent, false);
holder2 = new viewHolder2();
holder2.textView = (TextView)convertView.findViewById(R.id.textview2);
Log.e("convertView = ", "NULL TYPE_2");
convertView.setTag(holder2);
break;
case TYPE_3:
convertView = inflater.inflate(R.layout.listitem3, parent, false);
holder3 = new viewHolder3();
holder3.textView = (TextView)convertView.findViewById(R.id.textview3);
holder3.imageView = (ImageView)convertView.findViewById(R.id.imageview);
Log.e("convertView = ", "NULL TYPE_3");
convertView.setTag(holder3);
break;
}
}else{
//有convertView,按样式,取得不用的布局
switch(type)
{
case TYPE_1:
holder1 = (viewHolder1) convertView.getTag();
Log.e("convertView !!!!!!= ", "NULL TYPE_1");
break;
case TYPE_2:
holder2 = (viewHolder2) convertView.getTag();
Log.e("convertView !!!!!!= ", "NULL TYPE_2");
break;
case TYPE_3:
holder3 = (viewHolder3) convertView.getTag();
Log.e("convertView !!!!!!= ", "NULL TYPE_3");
break;
}
}
//设置资源
switch(type)
{
case TYPE_1:
holder1.textView.setText(Integer.toString(position));
holder1.checkBox.setChecked(true);
break;
case TYPE_2:
holder2.textView.setText(Integer.toString(position));
break;
case TYPE_3:
holder3.textView.setText(Integer.toString(position));
holder3.imageView.setBackgroundResource(R.drawable.icon);
break;
}
return convertView;
}
}
//各个布局的控件资源
class viewHolder1{
CheckBox checkBox;
TextView textView;
}
class viewHolder2{
TextView textView;
}
class viewHolder3{
ImageView imageView;
TextView textView;
}
}
感谢阅读,希望能帮助到大家, 谢谢大家对本站的支持!
# Android
# Listview
# Listview显示不同的视图布局
# Listview视图布局
# Android ListView里控件添加监听方法的实例详解
# Android ListView监听滑动事件的方法(详解)
# android动态布局之动态加入TextView和ListView的方法
# Android ListView添加头布局和脚布局实例详解
# Android中ListView Item布局优化技巧
# Android实现的ListView分组布局改进示例
# Android ListView自动显示隐藏布局的实现方法
# Android自定义listview布局实现上拉加载下拉刷新功能
# Android App界面的ListView布局实战演练
# Android开发实现ListView部分布局监听的方法
# 重写
# 多个
# 则是
# 所需
# 希望能
# 很简单
# 谢谢大家
# 介绍一下
# 所需要
# 多少个
# 复用
# 第二类
# ImageView
# LinearLayout
# CheckBox
# listViewTest
# extends
# TextView
# public
# widget
相关文章:
相册网站制作软件,图片上的网址怎么复制?
如何基于云服务器快速搭建网站及云盘系统?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
小型网站建站如何选择虚拟主机?
西安大型网站制作公司,西安招聘网站最好的是哪个?
宝塔面板如何快速创建新站点?
如何快速重置建站主机并恢复默认配置?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
威客平台建站流程解析:高效搭建教程与设计优化方案
公司网站设计制作厂家,怎么创建自己的一个网站?
济南专业网站制作公司,济南信息工程学校怎么样?
活动邀请函制作网站有哪些,活动邀请函文案?
建站主机与服务器功能差异如何区分?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
电商平台网站制作流程,电商网站如何制作?
浅析上传头像示例及其注意事项
零基础网站服务器架设实战:轻量应用与域名解析配置指南
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
如何在橙子建站上传落地页?操作指南详解
如何快速建站并高效导出源代码?
建站之星展会模板:智能建站与自助搭建高效解决方案
招贴海报怎么做,什么是海报招贴?
Python如何创建带属性的XML节点
高防服务器租用如何选择配置与防御等级?
建站之星后台密码遗忘?如何快速找回?
已有域名和空间,如何快速搭建网站?
如何在IIS7上新建站点并设置安全权限?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
建站主机数据库如何配置才能提升网站性能?
如何在万网自助建站中设置域名及备案?
简单实现Android验证码
如何通过网站建站时间优化SEO与用户体验?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
建站VPS能否同时实现高效与安全翻墙?
如何做网站制作流程,*游戏网站怎么搭建?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
建站之星如何取消后台验证码生成?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
山东网站制作公司有哪些,山东大源集团官网?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
网站制作壁纸教程视频,电脑壁纸网站?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
如何在Windows环境下新建FTP站点并设置权限?
山东云建站价格为何差异显著?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
微信h5制作网站有哪些,免费微信H5页面制作工具?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
已有域名如何免费搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。