我們知道當我們在列表/網格視圖中使用ViewHolder
模式時,我們使用setTag/getTag來獲取信息。但是在我的代碼中,如果我通過簡單的靜態ViewHolder替換它,它可以正常工作並顯示圖像。那麼,getTag()/setTag()
有什麼用?爲什麼使用getTag/setTag當我們可以用靜態變量做同樣的事情
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(mContext);
if(convertView == null) {
convertView = mInflater.inflate(R.layout.card_view, parent, false);
ViewHolder.image = (ImageView)convertView.findViewById(R.id.myImage);
}
// ....
// ... attach image here. Via library or directly.
// As an example I'm using Picasso
Picasso.with(mContext).load(mThumbIds[pos]).into(ViewHolder.image);
return convertView;
}
// static ViewHolder pattern.
private final static ViewHolder {
static final ImageView image;
}
private int mThumbIds[] = {
R.drawable.sample1, R.drawable.sample2 // etc...
};
這裏的情況下,你需要的XML: card_view.xml
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardElevation="1dp"
android:clickable="true"
app:cardCornerRadius="2dp"
android:foreground="?android:attr/selectableItemBackground">
<ImageView
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="100dp"
android:src="@drawable/placeholder"
android:scaleType="centerCrop"/>
</android.support.v7.widget.CardView>
顯示您實際將圖像從ViewHolder中移出的位置,這對您來說很明顯。 –
如果你的列表視圖中的所有項目使用相同的圖像,這很好。然而,通常的使用模式是爲每個listview項目創建一個新的ViewHolder對象,並在listview項目上調用setTag。 –