ListView Item多种布局优化





 

ListView Item多种布局优化

  2971人阅读  评论(0)  收藏  举报
  分类:
 
Android(31) 

之前一直都不知道ListView有多种布局的优化方法,只能通过隐藏来实现,自己也知道效率肯定是很低的,但是也不知道有什么方法,这些天又查了一些资料,然后知道 其实google早就帮我们想好了优化方案了。


假设你的ListView Item有三种布局样式的可能:就比如很简单的显示一行字,要靠左,居中,靠右。

这时我们就可以在BaseAdapter里面重写两个方法:

[java]  view plain  copy
 
  1. private static final int TYPE_LEFT = 0;  
  2. private static final int TYPE_CENTER = 1;  
  3. private static final int TYPE_RIGHT = 2;  
  4.   
  5. @Override  
  6. public int getViewTypeCount() {  
  7.     return 3;  
  8. }  
  9.   
  10. //假如我们的数据列表是list,里面的Bean有一个属性(type)是表明这个item应该使用哪种布局的。  
  11. @Override  
  12. public int getItemViewType(int position) {  
  13.     return list.get(position).type;  
  14. }  
  15.   
  16. //然后在我们的getView方法就可以这样了  
  17.   
  18. @Override  
  19. public View getView(int position, View convertView, ViewGroup parent) {  
  20.     int type = getItemViewType(position);  
  21.     ViewHoldLeft holdLeft;  
  22.     ViewHoldCenter holdCenter;  
  23.     ViewHoldRight holdRight;  
  24.       
  25.     if (convertView == null) {  
  26.         switch(type) {  
  27.             case TYPE_LEFT:  
  28.                 holdLeft = new ViewHoldLeft();  
  29.                 convertView = xxxxxx//像普通的一样  
  30.                 holdLeft.textView = xxxxxx//像普通的一样  
  31.                 holdLeft.textView.setText("holdLeft");  
  32.                 convertView.setTag(holdLeft);  
  33.                 break;  
  34.             case TYPE_CENTER:  
  35.                 holdCenter = new ViewHoldCenter();  
  36.                 convertView = xxxxxx//像普通的一样  
  37.                 holdCenter.textView = xxxxxx//像普通的一样  
  38.                 holdCenter.textView.setText("holdCenter");  
  39.                 convertView.setTag(holdCenter);  
  40.                 break;  
  41.             case TYPE_RIGHT:  
  42.                 holdRight = new ViewHoldRight();  
  43.                 convertView = xxxxxx//像普通的一样  
  44.                 holdRight.textView = xxxxxx//像普通的一样  
  45.                 holdRight.textView.setText("holdRight");  
  46.                 convertView.setTag(holdRight);  
  47.                 break;  
  48.             default:  
  49.                 break;  
  50.         }  
  51.     } else {  
  52.         switch(type) {  
  53.             case TYPE_LEFT:  
  54.                 holdLeft = (ViewHoldLeft)convertView.getTag();  
  55.                 holdLeft.textView.setText("holdLeft");  
  56.                 break;  
  57.             case TYPE_CENTER:  
  58.                 holdCenter = (ViewHoldCenter)convertView.getTag();  
  59.                 holdCenter.textView.setText("holdCenter");  
  60.                 break;  
  61.             case TYPE_RIGHT:  
  62.                 holdRight = (ViewHoldRight)convertView.getTag();  
  63.                 holdRight.textView.setText("holdRight");  
  64.                 break;  
  65.             default:  
  66.                 break;  
  67.         }  
  68.     }  
  69.     return convertView;  
  70.       
  71. }  
  72.   
  73.   
  74. private static class ViewHoldLeft {  
  75.     private TextView textView;  
  76. }  
  77.   
  78. private static class ViewHoldCenter {  
  79.     private TextView textView;  
  80. }  
  81.   
  82. private static class ViewHoldRight {  
  83.     private TextView textView;  
  84. }  


gogle还是很人性的。


你可能感兴趣的:(ListView Item多种布局优化)