在使用不同布局的时候,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

最新文章

  1. checkbox实现互斥
  2. JS window.open()属性
  3. Oracle:Authid Current_User使用
  4. 如何用js来判断浏览器类型(ie,firefox)等等
  5. java项目编译有误
  6. spring 3 的 @value的使用
  7. bzoj 2141 线段树套平衡树
  8. Html5游戏开发开始前的一些数学基础
  9. arch Failed to load module "intel"
  10. changePage() 页面跳转
  11. 用Node.JS+MongoDB搭建个人博客(成品展示)
  12. js eval函数写一个简单的计算器
  13. 什么是LDAP?
  14. 从零开始学安全(五)●Vmware虚拟机三种网络模式详解
  15. SQL Server 一张图让你秒懂联合表查询
  16. 3.6 html报告乱码问题优化
  17. myeclipse部署项目的时候报No projects are available for deployment to this server但是项目明明存在
  18. Kubernetes调用vSphere vSAN做持久化存储
  19. Hadoop基础总结
  20. git merge的使用

热门文章

  1. Snmp学习总结(二)——WinXP安装和配置SNMP
  2. Java知识回顾 (3)运算符
  3. C#程序中判断DEBUG和RELEASE状态
  4. JS 日期实用方法
  5. Android之循环显示图像的Android Gallery组件
  6. Unexpected identifier in composer-common/lib/cardstore/businessnetworkcardstore.js:54
  7. 使用Idea创建多Module工程
  8. spring boot1.5以上版本@ConfigurationProperties取消location注解后的替代方案 cannot resolve method location
  9. nginx源代码分析之内存池实现原理
  10. CF 329A(Purification-贪心-非DLX)