コンテキストなしで質問を見たいだけの場合は、一番下にスキップしてください
私が構築しているAndroidアプリには、3つの列を持つ単純なテーブルがあります。
_id INTEGER PRIMARY KEY ...、名前TEXT、色INT
このテーブルはと呼ばれcategories
ます。私は自分のカテゴリをデータベースからロードし、次のよう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を使用してデバッグすると、3回ヒットし、columnIndexは常に1
です。
from配列のエントリごとに、デバッガーがsetViewValue1
に1回入ることを期待していました。最初にcolumnIndexがあり、次に2
。または、クエリ結果の列ごとに1回ずつです。
上記のコードは機能しますが、NAME_COLUMN定数とCOLOR_COLUMN定数が原因で、目的の機能を取得できます。カスタムViewBindersの経験が豊富な人から、 setViewValueとそのパラメーターの説明を聞いてみたいと思います。