2012-07-26 51 views
1

我使用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模式更重要的是重用視圖,因此您不必再次搜索它們,但有什麼方法可以將它擴展以使用我想要的?我能想到的唯一解決方案是創建一個隱藏視圖並將此整數填充到它的文本字段中,我可以稍後檢索它,但是我希望有一個更簡單的解決方案。

回答

1

的ViewHolder模式更多的是重複使用的次數,所以你不要有 再次尋找他們,但有什麼辦法把它與我想要的東西擴展到 工作?

這是正確的,持有人模式用於緩存每次需要顯示行時查找視圖。也許我不明白你想要做什麼,但以下幾點:

我想存儲在我的ViewHolder對應於 值從我的光標列的整數。後來我想遍歷ListView中的所有 項目並提取此值。

爲什麼你不能簡單的克服它在強調Cursor的引用(一個CursorAdaptergetCursor法),分步提取您需要的值(其中,閱讀你的代碼後,似乎是id行)?您可以始終在適配器內部存儲光標所需值的數組/列表。此數組/列表將在bindView中更新,以便您擁有正確的值。

0

您可以將它填入您的GroupCheckedTextViewtag字段中。

相關問題