我使用带有CursorAdapter的ViewHolder模式来填充ListView。我尝试在ViewHolder中存储一个整数,它对应于游标列中的一个值。稍后,我想遍历我的ListView中的所有项,并提取出这个值。
但是,当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模式更多的是重用视图,这样您就不必再次搜索它们,但是有什么方法可以扩展它以满足我的需求呢?我能想到的唯一解决方案是创建一个隐藏的视图,并将这个整数填充到它的文本字段中,稍后我可以检索它,但我希望有一个不那么麻烦的解决方案。
发布于 2012-07-26 17:02:15
您可以将其填充到GroupCheckedTextView的tag字段中。
https://stackoverflow.com/questions/11665708
复制相似问题