实现代码

Adapter的代码

其中:ViewHolder分别是三个不同的布局,也就是ListView中每一项的布局

TYPE_1...是三种类型.

在使用不同布局的时候,getItemViewType和getViewType不能少,一般是不用这两个函数的重载的

[java] view plain copy
  1. classRunRankAdapterextendsBaseAdapter{
  2. ArrayList<HashMap<String,Object>>ls;
  3. ContextmContext;
  4. LinearLayoutlinearLayout=null;
  5. LayoutInflaterinflater;
  6. TextViewtex;
  7. finalintVIEW_TYPE=3;
  8. finalintTYPE_1=0;
  9. finalintTYPE_2=1;
  10. finalintTYPE_3=2;
  11. publicRunRankAdapter(Contextcontext,
  12. ArrayList<HashMap<String,Object>>list){
  13. ls=list;
  14. mContext=context;
  15. }
  16. @Override
  17. publicintgetCount(){
  18. returnls.size();
  19. }
  20. @Override
  21. publicObjectgetItem(intposition){
  22. returnls.get(position);
  23. }
  24. @Override
  25. publiclonggetItemId(intposition){
  26. return0;
  27. }
  28. //每个convertview都会调用此方法,获得当前所需要的view样式
  29. @Override
  30. publicintgetItemViewType(intposition){
  31. intp=position;
  32. if(p==0)
  33. returnTYPE_1;
  34. elseif(p==1)
  35. returnTYPE_2;
  36. else
  37. returnTYPE_3;
  38. }
  39. @Override
  40. publicintgetViewTypeCount(){
  41. return3;
  42. }
  43. @Override
  44. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
  45. ViewHolder1holder1=null;
  46. ViewHolder2holder2=null;
  47. ViewHolder3holder3=null;
  48. inttype=getItemViewType(position);
  49. if(convertView==null){
  50. inflater=LayoutInflater.from(mContext);
  51. //按当前所需的样式,确定new的布局
  52. switch(type){
  53. caseTYPE_1:
  54. convertView=inflater.inflate(R.layout.item_runrank1,
  55. parent,false);
  56. holder1=newViewHolder1();
  57. holder1.rank1=(TextView)convertView
  58. .findViewById(R.id.tv_list1_rank);
  59. holder1.time1=(TextView)convertView
  60. .findViewById(R.id.tv_list1_time);
  61. convertView.setTag(holder1);
  62. break;
  63. caseTYPE_2:
  64. convertView=inflater.inflate(R.layout.item_runrank2,
  65. parent,false);
  66. holder2=newViewHolder2();
  67. holder2.rank2=(TextView)convertView
  68. .findViewById(R.id.tv_list2_rank);
  69. holder2.time2=(TextView)convertView
  70. .findViewById(R.id.tv_list2_time);
  71. convertView.setTag(holder2);
  72. break;
  73. caseTYPE_3:
  74. convertView=inflater.inflate(R.layout.item_runrank3,
  75. parent,false);
  76. holder3=newViewHolder3();
  77. holder3.rank3=(TextView)convertView
  78. .findViewById(R.id.tv_list3_rank);
  79. holder3.time3=(TextView)convertView
  80. .findViewById(R.id.tv_list3_time);
  81. convertView.setTag(holder3);
  82. break;
  83. default:
  84. break;
  85. }
  86. }else{
  87. switch(type){
  88. caseTYPE_1:
  89. holder1=(ViewHolder1)convertView.getTag();
  90. break;
  91. caseTYPE_2:
  92. holder2=(ViewHolder2)convertView.getTag();
  93. break;
  94. caseTYPE_3:
  95. holder3=(ViewHolder3)convertView.getTag();
  96. break;
  97. }
  98. }
  99. //设置资源
  100. switch(type){
  101. caseTYPE_1:
  102. holder1.rank1.setText(""+(position+1));
  103. holder1.time1.setText(ls.get(position).get("time").toString());
  104. break;
  105. caseTYPE_2:
  106. holder2.rank2.setText(""+(position+1));
  107. holder2.time2.setText(ls.get(position).get("time").toString());
  108. holder2.totaldistance2.setText(ls.get(position)
  109. break;
  110. caseTYPE_3:
  111. holder3.rank3.setText(""+(position+1));
  112. holder3.time3.setText(ls.get(position).get("time").toString());
  113. break;
  114. }
  115. returnconvertView;
  116. }
  117. publicclassViewHolder1{
  118. TextViewrank1;
  119. TextViewtime1;
  120. }
  121. publicclassViewHolder2{
  122. TextViewrank2;
  123. TextViewtime2;
  124. }
  125. publicclassViewHolder3{
  126. TextViewrank3;
  127. TextViewtime3;
  128. }
  129. }

使用方式:

声明并定义自己的Adapter,在ListView中设置他的Adapter

[java] view plain copy
  1. privateRunRankAdapterrunRankAdapter;
  2. ArrayList<HashMap<String,Object>>runRank;
  3. ListViewlv_runRank;
  4. runRank=newArrayList<HashMap<String,Object>>();
  5. runRankAdapter=newRunRankAdapter(this,runRank);
  6. lv_runRank=(ListView)findViewById(R.id.lv_runRank);
  7. lv_runRank.setAdapter(runRankAdapter);


还有一种方法:

在主布局文件中包含一个LinearLayout. 并且设置android:orientation="vertical"
定义两种不同的布局文件,然后代码中,根据不同条件调用.addview向LinearLayout加载就可以了

转自http://blog.csdn.net/lllkey/article/details/9093107


更多相关文章

  1. android百度地图开发总结
  2. Android使用Canvas绘制圆形进度条效果
  3. android 世界各国英文简写代码 资源文件
  4. jQuery Mobile 入门教程
  5. 主题:Android(安卓)皮肤apk实现换肤
  6. Android(安卓)MVVM模式入门
  7. 常用布局之相对布局
  8. ButterKnife代码生成的插件
  9. [教程] Android修改源代码控制永不锁屏

随机推荐

  1. android抽屉SlidingDrawer——错误显示
  2. android实现文本复制到剪切板功能(Clipbo
  3. Android(安卓)开发手顺2--- “An SDK Tar
  4. android 格林尼治标准时间的 格式转换 (S
  5. 安装android-ndk-1.5_r1遇到的问题及解决
  6. java-universal-tween-engine
  7. UBUNTU搭建android SDK开发环境
  8. Android开发工具之Android(安卓)Studio--
  9. Android(安卓)Material Design Library系
  10. Android(安卓)onItemLongClick+onCreateCo