gpt4 book ai didi

android - 如何在 ViewHolder 中存储原始值?

转载 作者:行者123 更新时间:2023-11-30 04:06:00 25 4
gpt4 key购买 nike

我使用带有 CursorAdapter 的 ViewHolder 模式来填充 ListView。我试图在我的 ViewHolder 中存储一个整数,该整数对应于我的光标列中的一个值。稍后我想遍历我的 ListView 中的所有项目并提取这个值。

但是,当 CursorAdapter 回收我的 View 时,它似乎不会更新我的 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 模式更多的是关于重用 View ,因此您不必再次搜索它们,但是有什么方法可以扩展它来处理我想要的内容吗?我能想到的唯一解决方案是创建一个隐藏 View 并将这个整数填充到它的文本字段中,我可以稍后检索它,但我希望有一个不那么棘手的解决方案。

最佳答案

The ViewHolder pattern is more about reusing the Views so you don't have to search for them again, but is there any way to extend it to work with what I want?

没错,holder pattern 用于在每次需要显示行时缓存查找 View 。也许我不明白你想做什么,但以下内容:

I'm trying to store an integer in my ViewHolder that corresponds to a value in a column from my cursor. Later I want to iterate over all the items in my ListView and pull out this value.

为什么你不能简单地获取对下划线 Cursor 的引用(CursorAdapter 具有 getCursor 方法),跨过它然后提取您想要的值(在阅读您的代码后,它似乎是该行的 id )?您始终可以在适配器内部存储来自游标的所需值的数组/列表。此数组/列表将在 bindView 中更新,因此您在其中具有正确的值。

关于android - 如何在 ViewHolder 中存储原始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11665708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com