2013-10-23 48 views
1

什麼是一回事,如果(converView == NULL){} 其他 { } 什麼 如果我避免寫其他部分,以及它如何影響我的代碼? 我只是想知道如果它沒有其他部分工作正常。有人可以解釋有關convertview的gettag和settag嗎?在Android的名單適配器,如果convertView是什麼空不空?誰能請在下面getView方法解釋

  public View getView(int position, View convertView, ViewGroup parent) { 
     DeviceViewHolder holder = null; 
     mSelectedDeviceBin = getItem(position); 

     LayoutInflater mInflater = (LayoutInflater) context 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.single_device_view, null); 
      holder = new DeviceViewHolder(); 
      holder.deviceId = (TextView) convertView 
        .findViewById(R.id.deviceId); 

      holder.deviceType = (TextView) convertView 
        .findViewById(R.id.deviceType); 

      convertView.setTag(holder); 

     } else 

      holder = (DeviceViewHolder) convertView.getTag(); 

     // Populating the views 
     holder.deviceId.setText(mSelectedDeviceBin.getDeviceBinId()); 

     StringBuilder deviceCount = new StringBuilder(); 
     deviceCount.append(""); 
     double count = mSelectedDeviceBin.getQtyStock(); 
     deviceCount.append(count); 
     String deviceCountString = deviceCount.toString(); 
     holder.deviceType.setText("Total number of Items:" 
       + deviceCountString); 

     return convertView; 
    } 
+2

[ListView的世界](http://www.youtube.com/watch?v=wDBM6wVEO70)是最好的答案。這是一個1小時的Google IO演示文稿,但這不是浪費時間 – gunar

+2

[How ListView的回收機制的工作原理]可能的重複(http://stackoverflow.com/questions/11945563/how-listviews-recycling-mechanism-works) –

回答

6

該實現使用convertViews和ViewHolder模式,其工作方式如下。

Android不會爲列表中的每個項目添加新視圖,而只會創建如此多的視圖。一旦視圖熄滅,它將被重用。通過這種方式,相對較慢的充氣呼叫的數量被最小化。其次,ViewHolder模式可以確保視圖查找次數(findViewById())最小化,因爲這也相對較慢,特別是在滾動時。因此,不要每次都查找視圖,直接引用會保存在內存中,並存儲在ViewHolder中。爲了確保正確的ViewHolder對象存儲在正確的項目視圖中,它們使用view.setTag()在convertView中設置。它們可以通過使用getTag()調用來獲得。

其他需要,因爲否則viewHolder變量將爲null,並且應用程序會崩潰。

爲清楚起見我會建議你寫別人是這樣的:

} else { 
    holder = (DeviceViewHolder) convertView.getTag(); 
} 

編輯:另外,您可以移動,如果(convertView == NULL){}語句內LayoutInflator的創建。否則不需要。

+0

In我的案例使用上面的if-else結果在一個持有者附加到兩個ConvertViews,最終導致點擊一行和兩行同時被觸發的事件............. – Kay

+1

請make一個新的問題,考慮到你的兩行評論可能不會幫助任何人在這裏,我們也無法幫助你。 –

相關問題