ListView显示不同布局
2024-08-31 05:11:07
在使用不同布局的时候,getItemViewType和getViewType不能少,通常是不用这两个函数的重载的
listView.setAdapter(new BaseAdapter() { @Override
public int getViewTypeCount() {//例:3种类型的布局 return 3;
} @Override
public int getItemViewType(int position) { //该方法很重要。adapter内部会自己主动调用该方法。然后依据该类型得到缓存的view(可能为null),并传给getView方法//的convertView參数,假设该类型相应的view已被缓存过,则getView中的convertView就不为null
//返回的类型要小于getViewTypeCount(),否则会报数组越界
if (position==20||position==40||position==60) {
return 1;
}
if (position==25||position==45||position==65) {
return 2;
} return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
int type=getItemViewType(position);
System.out.println("getView "+position+" "+convertView+" "+type);
if (convertView==null) {
if (type==0) {
TextView tv=new TextView(getApplicationContext());
tv.setText(""+position);
tv.setPadding(20, 20, 20, 20);
tv.setTextColor(Color.BLACK); convertView=tv; }else if(type==1){
TextView tv=new TextView(getApplicationContext());
tv.setText(""+position);
tv.setPadding(20, 10, 10, 10);
tv.setTextColor(Color.BLACK);
tv.setBackgroundColor(Color.GREEN);
convertView=tv; }else{
ImageView iv=new ImageView(getApplicationContext());
iv.setImageResource(R.drawable.ic_launcher);
convertView=iv;
} }
switch (type) { //依据类型就能够大胆的强转了,不会抛异常的
case 0:
TextView tv=(TextView) convertView;
tv.setText(""+position);
break;
case 1:
tv=(TextView) convertView;
tv.setText(""+position);
break;
case 2:
ImageView iv=(ImageView) convertView; break; }
return convertView;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
} @Override
public int getCount() {
// TODO Auto-generated method stub
return 5000;
}
}); // 为了验证getView的convertView參数是我们想要的view, 控件高度要高一些。保证同一屏不会出现两个绿色背景textview或imageview //能够看到20 25位置是第一次出现绿色背景textview和imagerview的位置,相应的convertView为null,40 45位置相应的convertView不为null。传进来的是已经缓存过的view
最新文章
- checkbox实现互斥
- JS window.open()属性
- Oracle:Authid Current_User使用
- 如何用js来判断浏览器类型(ie,firefox)等等
- java项目编译有误
- spring 3 的 @value的使用
- bzoj 2141 线段树套平衡树
- Html5游戏开发开始前的一些数学基础
- arch Failed to load module ";intel";
- changePage() 页面跳转
- 用Node.JS+MongoDB搭建个人博客(成品展示)
- js eval函数写一个简单的计算器
- 什么是LDAP?
- 从零开始学安全(五)●Vmware虚拟机三种网络模式详解
- SQL Server 一张图让你秒懂联合表查询
- 3.6 html报告乱码问题优化
- myeclipse部署项目的时候报No projects are available for deployment to this server但是项目明明存在
- Kubernetes调用vSphere vSAN做持久化存储
- Hadoop基础总结
- git merge的使用
热门文章
- Snmp学习总结(二)——WinXP安装和配置SNMP
- Java知识回顾 (3)运算符
- C#程序中判断DEBUG和RELEASE状态
- JS 日期实用方法
- Android之循环显示图像的Android Gallery组件
- Unexpected identifier in composer-common/lib/cardstore/businessnetworkcardstore.js:54
- 使用Idea创建多Module工程
- spring boot1.5以上版本@ConfigurationProperties取消location注解后的替代方案 cannot resolve method location
- nginx源代码分析之内存池实现原理
- CF 329A(Purification-贪心-非DLX)