gpt4 book ai didi

android - 一些有助于理解 ViewBInder 中的 columnIndex

转载 作者:太空狗 更新时间:2023-10-29 13:42:21 24 4
gpt4 key购买 nike

如果您只想在没有上下文的情况下查看问题,请跳到底部

我正在构建的 Android 应用程序有一个包含三列的简单表格:

_id INTEGER PRIMARY KEY..., name TEXT, color INT

此表称为类别。我从数据库中加载我的类别并将它们提供给 SimpleCursorAdapter 以便与 Spinner 一起使用,如下所示:

String[] from = new String[] {
ListDbAdapter.KEY_CATEGORY_NAME,
ListDbAdapter.KEY_CATEGORY_COLOR };
int[] to = new int[] { R.id.categorySpinnerItem };

mCategorySpinnerAdapter = new SimpleCursorAdapter(this,
R.layout.category_spinner_item, categoryCursor, from, to);

mCategorySpinnerAdapter
.setViewBinder(new CategorySpinnerViewBinder());
mCategorySpinner.setAdapter(mCategorySpinnerAdapter);

我设置了一个自定义的 ViewBinder,因为我希望类别名称是微调项的文本,颜色是背景色。我的 ViewBinder 看起来像这样:

private static final int NAME_COLUMN = 1;
private static final int COLOR_COLUMN = 2;

@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {

TextView textView = (TextView) view;

String name = cursor.getString(NAME_COLUMN);
int color = cursor.getInt(COLOR_COLUMN);

textView.setText(name);
textView.setBackgroundColor(color);

return true;
}

这是我的问题(最后)

setViewValue 方法中,columnIndex 应该做什么?文档说 “可以在光标中找到数据的列” 但是当我通过 setViewValue 进行调试时,我点击了它三下并 columnIndex 始终为 1

我期待调试器为 from 数组中的每个条目进入一次 setViewValue,columnIndex 首先是 1,然后是 2。或者可能对查询结果中的每一列进行一次。

上面的代码有效,我可以获得所需的功能,但这只是因为我的 NAME_COLUMN 和 COLOR_COLUMN 常量。我真的很想听听对自定义 ViewBinders 更有经验的人对 setViewValue 及其参数的解释。

最佳答案

在SimpleCursorAdapter的源码中,setViewValue是在bindView中调用的:

bound = binder.setViewValue(v, cursor, from[i]);

其中第三个参数 from[i] 很有趣,它是对 int[] 的迭代,代表所使用的列索引。但是,迭代本身的 [i] 索引来自传递给适配器构造函数的 int[] to,在您的情况下,它只有1 项 - R.id.categorySpinnerItem

编辑:用两个词来说,String[] 和 int[] 应该是等效的,相同的大小和相同的顺序 - 对于每个列名,您需要一个 int R.id ...第一个 View ID 将连接到第一列 ID 为 from[0],第二列为 from[1] 等等,如果你传递 10 列,但你只有 3 个 R.id-s,你将只能从 [2] :)

关于android - 一些有助于理解 ViewBInder 中的 columnIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4190478/

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