2013-10-28 46 views
0

我有一個gridView,我在其中使用自定義適配器填充數據。爲此我重寫了getView()方法。然而,由於我的gridview是一個自定義的,我不得不使用一個靜態持有者類(如在線提供的許多示例中所見)。如果我不想使用持有者,我可以採用其他方式實施嗎?爲什麼使用getTag()和setTag()?我搜索了他們,但找不到足夠的解釋。適配器的持有者

holder類 -

static class RecordHolder{ 
    ImageView imgView; 
    TextView txtView; 
} 

的getView方法 -

public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    RecordHolder holder = new RecordHolder(); 
    if (convertView == null) { 
     LayoutInflater inflater = (getActivity()).getLayoutInflater(); 
     row = inflater.inflate(R.layout.grid_line, parent, false); 

     holder.imgView = (ImageView) row.findViewById(R.id.imageView); 
     holder.txtView = (TextView) row.findViewById(R.id.textView); 

     row.setTag(holder); 
    } else { 
     holder = (RecordHolder) row.getTag(); 
    } 

    ResolveInfo resolveInfo = mAppList.get(position); 
    holder.imgView.setImageDrawable(resolveInfo.loadIcon(getActivity().getPackageManager())); 
    holder.txtView.setText(resolveInfo.loadLabel(getActivity().getPackageManager())); 

    return row; 

} 

回答

0

您可以直接使用

final ImageView imgView = (ImageView) row.findViewById(R.id.imageView); 
final TextView txtView = (TextView) row.findViewById(R.id.textView); 

但最好使用ViewHolder

ViewHolder對象將每個組件視圖存儲在Layout的標籤字段內,因此您可以立即訪問它們而無需重複查看它們。首先,您需要創建一個類來保存一組精確的視圖。

+0

謝謝,我通過** ViewHolder的** android [官方說明頁面](http://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder),它澄清了很多。即使示例示例[here](http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html)也提供了一個很好的演示。 –

0

由於古普塔說,你可以在每次需要填入你的情況,該行或網格時間做findviewbyid,但是這僅僅是低效率的,因此是更好的,只是做一次,然後存儲指針每在行或網格中查看(存儲在代表行的視圖內),這將爲您每次需要膨脹一行時節省時間,因此您將看到性能提高。

關於文檔,here您有setTag方法的文檔。 你可以看到它說:「...標籤也可以用來在一個視圖內存儲數據,而不訴諸於另一個數據結構。」所以你有答案爲什麼他們使用這種方法,而getTag只是爲了獲得你以前保存的東西。

+0

謝謝,澄清了很多(getTag-setTag方法)。但是,我們是否也沒有對持有人這樣做?我的意思是每當第一次加載列表時調用getView,持有者就會獲取ImageView和TextView。 –

+0

不一樣,調用findviewbyid需要去查看父視圖是否存在,如果它存在於實例化的地方,而持有者已經將視圖的「指針」作爲對象變量,並且因此從持有者那裏訪問視圖的方式更快。 –

相關問題