ListVIew 中加載多個item 佈局的covertView複用問題

  1. public class listViewTest extends Activity {
  2. /** Called when the activity is first created. */
  3. ListView listView;
  4. MyAdapter listAdapter;
  5. ArrayList<String> listString;

  6. @Override
  7. public void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.main);
  10. listView = (ListView)this.findViewById(R.id.listview);
  11. listString = new ArrayList<String>();
  12. for(int i = 0 ; i < 100 ; i++)
  13. {
  14. listString.add(Integer.toString(i));
  15. }
  16. listAdapter = new MyAdapter(this);
  17. listView.setAdapter(listAdapter);
  18. }

  19. class MyAdapter extends BaseAdapter{

  20. Context mContext;
  21. LinearLayout linearLayout = null;
  22. LayoutInflater inflater;
  23. TextView tex;
  24. final int VIEW_TYPE = 3;
  25. final int TYPE_1 = 0;
  26. final int TYPE_2 = 1;
  27. final int TYPE_3 = 2;

  28. public MyAdapter(Context context) {
  29. // TODO Auto-generated constructor stub
  30. mContext = context;
  31. inflater = LayoutInflater.from(mContext);
  32. }

  33. @Override
  34. public int getCount() {
  35. // TODO Auto-generated method stub
  36. return listString.size();
  37. }

  38. //每個convert view都會調用此方法,獲得當前所需要的view樣式
  39. @Override
  40. public int getItemViewType(int position) {
  41. // TODO Auto-generated method stub
  42. int p = position%6;
  43. if(p == 0)
  44. return TYPE_1;
  45. else if(p < 3)
  46. return TYPE_2;
  47. else if(p < 6)
  48. return TYPE_3;
  49. else
  50. return TYPE_1;

  51. }

  52. @Override
  53. public int getViewTypeCount() {
  54. // TODO Auto-generated method stub
  55. return 3;
  56. }

  57. @Override
  58. public Object getItem(int arg0) {
  59. // TODO Auto-generated method stub
  60. return listString.get(arg0);
  61. }

  62. @Override
  63. public long getItemId(int position) {
  64. // TODO Auto-generated method stub
  65. return position;
  66. }

  67. @Override
  68. public View getView(int position, View convertView, ViewGroup parent) {
  69. // TODO Auto-generated method stub
  70. viewHolder1 holder1 = null;
  71. viewHolder2 holder2 = null;
  72. viewHolder3 holder3 = null;
  73. int type = getItemViewType(position);


  74. //無convertView,需要new出各個控件
  75. if(convertView == null)

  76. Log.e("convertView = ", " NULL");

  77. //按當前所需的樣式,確定new的佈局
  78. switch(type)
  79. {
  80. case TYPE_1:
  81. convertView = inflater.inflate(R.layout.listitem1, parent, false);
  82. holder1 = new viewHolder1();
  83. holder1.textView = (TextView)convertView.findViewById(R.id.textview1);
  84. holder1.checkBox = (CheckBox)convertView.findViewById(R.id.checkbox);
  85. Log.e("convertView = ", "NULL TYPE_1");
  86. convertView.setTag(holder1);
  87. break;
  88. case TYPE_2:
  89. convertView = inflater.inflate(R.layout.listitem2, parent, false);
  90. holder2 = new viewHolder2();
  91. holder2.textView = (TextView)convertView.findViewById(R.id.textview2);
  92. Log.e("convertView = ", "NULL TYPE_2");
  93. convertView.setTag(holder2);
  94. break;
  95. case TYPE_3:
  96. convertView = inflater.inflate(R.layout.listitem3, parent, false);
  97. holder3 = new viewHolder3();
  98. holder3.textView = (TextView)convertView.findViewById(R.id.textview3);
  99. holder3.imageView = (ImageView)convertView.findViewById(R.id.imageview);
  100. Log.e("convertView = ", "NULL TYPE_3");
  101. convertView.setTag(holder3);
  102. break;
  103. }
  104. }
  105. else
  106. {
  107. //有convertView,按樣式,取得不用的佈局
  108. switch(type)
  109. {
  110. case TYPE_1:
  111. holder1 = (viewHolder1) convertView.getTag();
  112. Log.e("convertView !!!!!!= ", "NULL TYPE_1");
  113. break;
  114. case TYPE_2:
  115. holder2 = (viewHolder2) convertView.getTag();
  116. Log.e("convertView !!!!!!= ", "NULL TYPE_2");
  117. break;
  118. case TYPE_3:
  119. holder3 = (viewHolder3) convertView.getTag();
  120. Log.e("convertView !!!!!!= ", "NULL TYPE_3");
  121. break;
  122. }
  123. }

  124. //設置資源
  125. switch(type)
  126. {
  127. case TYPE_1:
  128. holder1.textView.setText(Integer.toString(position));
  129. holder1.checkBox.setChecked(true);
  130. break;
  131. case TYPE_2:
  132. holder2.textView.setText(Integer.toString(position));
  133. break;
  134. case TYPE_3:
  135. holder3.textView.setText(Integer.toString(position));
  136. holder3.imageView.setBackgroundResource(R.drawable.icon);
  137. break;
  138. }


  139. return convertView;
  140. }

  141. }


  142. //各個佈局的控件資源

  143. class viewHolder1{
  144. CheckBox checkBox;
  145. TextView textView;
  146. }
  147. class viewHolder2{
  148. TextView textView;
  149. }
  150. class viewHolder3{
  151. ImageView imageView;
  152. TextView textView;
  153. }
  154. }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章