我使用ViewHolder模式與CursorAdapter來填充ListView。我試圖在我的ViewHolder中存儲一個整數,該整數對應於我的光標所在列中的一個值。後來我想遍歷ListView中的所有項目並提取此值。如何將原始值存儲在ViewHolder中?
但是,看起來,當CursorAdapter回收我的視圖時,它不會更新我的ViewHolder中的整數值。
這裏是我的CursorAdapter中的相關代碼(我使用的是Mono For Android,所以代碼是C#,但想法是相同的)。
public override void BindView(View view, Context context, ICursor cursor)
{
var viewHolder = view.Tag as ViewHolder;
if (viewHolder.GroupCheckedTextView != null)
{
viewHolder.GroupCheckedTextView.Text = cursor.GetString(ColumnMapping["Name"]);
}
if (viewHolder.FieldTextView != null)
{
viewHolder.FieldTextView.Text = cursor.GetString(ColumnMapping["Value"]);
viewHolder.LabelTextView.Text = cursor.GetString(ColumnMapping["Label"]) ?? cursor.GetString(ColumnMapping["TypeLabel"]);
}
// I tried updating it manually, but it doesn't stick...
//viewHolder.GroupId = cursor.GetInt(ColumnMapping["GroupId"]);
//view.Tag = viewHolder;
}
public override View NewView(Context context, ICursor cursor, ViewGroup parent)
{
var inflator = LayoutInflater.FromContext(context);
View view = null;
if (IsNewGroup(cursor, cursor.Position))
{
view = inflator.Inflate(Resource.Layout.Group, parent, false);
}
else
{
view = inflator.Inflate(Resource.Layout.Field, parent, false);
}
var viewHolder = new ViewHolder(view);
viewHolder.GroupId = cursor.GetInt(ColumnMapping["GroupId"]);
view.Tag = viewHolder;
return view;
}
我想我明白了爲什麼。 ViewHolder模式更重要的是重用視圖,因此您不必再次搜索它們,但有什麼方法可以將它擴展以使用我想要的?我能想到的唯一解決方案是創建一個隱藏視圖並將此整數填充到它的文本字段中,我可以稍後檢索它,但是我希望有一個更簡單的解決方案。