回答編集履歴
6
追記
test
CHANGED
@@ -33,3 +33,6 @@
|
|
33
33
|
}
|
34
34
|
}
|
35
35
|
```
|
36
|
+
|
37
|
+
なお、ビューの表示内容を変えることを「xmlの変更」と表現されてもかなり伝わり難いと思います。
|
38
|
+
レイアウト xml 自体は静的なもので、アプリから変更するようなモノではありません。
|
5
コード追加
test
CHANGED
@@ -1,3 +1,35 @@
|
|
1
1
|
ViewBinder の使い方が間違われています。
|
2
2
|
ViewBinder の setViewValue メソッドは「リストの各行毎の、 SimpleCursorAdapter のコンストラクタの from/to の件数毎」に呼ばれ、そのパラメータは、 view が to に指定した id の view、 cursor がその行位置まで移動した状態のカーソル、 columnIndex が from で指定したカラム名の位置です。
|
3
3
|
つまり『この行のこの view に cursor の 指定カラムのデータをどう表示するのか』だけをするのであって、cursor を動かす必要はありませんし、 **from/to に指定していない columnIndex/view に関する呼び出しは行われません**。 ( アダプタにとっては from/to に指定していないビューは存在しないも同じです。 )
|
4
|
+
|
5
|
+
MainActivity.java の一部
|
6
|
+
```java
|
7
|
+
@Override
|
8
|
+
protected void onCreate(Bundle savedInstanceState) {
|
9
|
+
super.onCreate(savedInstanceState);
|
10
|
+
setContentView(R.layout.activity_main);
|
11
|
+
|
12
|
+
//(略)
|
13
|
+
|
14
|
+
Cursor cursor = UserDAO.findAll(db);
|
15
|
+
String[] from = { "name", "point" }; //カーソル内の列名 ( これから cursor#getColumnIndex() で setViewValue() の columnIndex パラメータが生成される )
|
16
|
+
int[] to = { R.id.name, R.id.image }; //列に対応する layout 内の view の id ( これから findViewById() で setViewValue() の view パラメータが生成される )
|
17
|
+
SimpleCursorAdapter adapter = new SimpleCursorAdapter(MainActivity.this, R.layout.list_image, cursor, from, to, 0);
|
18
|
+
adapter.setViewBinder(new CustomViewBinder());
|
19
|
+
list.setAdapter(adapter);
|
20
|
+
}
|
21
|
+
|
22
|
+
private class CustomViewBinder implements SimpleCursorAdapter.ViewBinder {
|
23
|
+
@Override
|
24
|
+
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
|
25
|
+
switch(view.getId()) { //to に書いたどれかが来ているはず
|
26
|
+
case R.id.image:
|
27
|
+
ImageView imageView = (ImageView)view;
|
28
|
+
int point = Integer.parseInt(cursor.getString(columnIndex)); //なぜ point カラムは INTEGER でなく TEXT?
|
29
|
+
imageView.setImageResource(point < 70 ? R.drawable.ng : R.drawable.ok); //okの場合も設定 ( view が使い回されている可能性がある )
|
30
|
+
return true;
|
31
|
+
}
|
32
|
+
return false; //name はアダプタのデフォルトで処理
|
33
|
+
}
|
34
|
+
}
|
35
|
+
```
|
4
修正
test
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
ViewBinder の使い方が間違われています。
|
2
2
|
ViewBinder の setViewValue メソッドは「リストの各行毎の、 SimpleCursorAdapter のコンストラクタの from/to の件数毎」に呼ばれ、そのパラメータは、 view が to に指定した id の view、 cursor がその行位置まで移動した状態のカーソル、 columnIndex が from で指定したカラム名の位置です。
|
3
|
-
つまり『この行のこの view に cursor の 指定カラムのデータをどう表示するのか』だけをするのであって、cursor を動かす必要はありませんし、 **to に指定していない I
|
3
|
+
つまり『この行のこの view に cursor の 指定カラムのデータをどう表示するのか』だけをするのであって、cursor を動かす必要はありませんし、 **from/to に指定していない columnIndex/view に関する呼び出しは行われません**。 ( アダプタにとっては from/to に指定していないビューは存在しないも同じです。 )
|
3
from と to の間違い
test
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
ViewBinder の使い方が間違われています。
|
2
|
-
ViewBinder の setViewValue メソッドは「リストの各行毎の、 SimpleCursorAdapter のコンストラクタの from/to の件数毎」に呼ばれ、そのパラメータは、 view が
|
2
|
+
ViewBinder の setViewValue メソッドは「リストの各行毎の、 SimpleCursorAdapter のコンストラクタの from/to の件数毎」に呼ばれ、そのパラメータは、 view が to に指定した id の view、 cursor がその行位置まで移動した状態のカーソル、 columnIndex が from で指定したカラム名の位置です。
|
3
|
-
つまり『この行のこの view に cursor の 指定カラムのデータをどう表示するのか』だけをするのであって、cursor を動かす必要はありませんし、 **
|
3
|
+
つまり『この行のこの view に cursor の 指定カラムのデータをどう表示するのか』だけをするのであって、cursor を動かす必要はありませんし、 **to に指定していない ID の view に関する呼び出しは行われません**。 ( アダプタにとっては from/to に指定していないビューは存在しないも同じです。 )
|
2
修正
test
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
ViewBinder の使い方が間違われています。
|
2
2
|
ViewBinder の setViewValue メソッドは「リストの各行毎の、 SimpleCursorAdapter のコンストラクタの from/to の件数毎」に呼ばれ、そのパラメータは、 view が from に指定した id の view、 cursor がその行位置まで移動した状態のカーソル、 columnIndex が to で指定したカーソルのカラムの位置です。
|
3
|
-
つまり『この行のこの view に cursor の 指定カラムのデータをどう表示するのか』だけをするのであって、
|
3
|
+
つまり『この行のこの view に cursor の 指定カラムのデータをどう表示するのか』だけをするのであって、cursor を動かす必要はありませんし、 **from に指定していない ID の view に関する呼び出しは行われません**。 ( アダプタにとっては from/to に指定していないビューは存在しないも同じです。 )
|
1
脱字
test
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
ViewBinder の使い方が間違われています。
|
2
|
-
ViewBinder の setViewValue メソッドは「リストの各行毎の
|
2
|
+
ViewBinder の setViewValue メソッドは「リストの各行毎の、 SimpleCursorAdapter のコンストラクタの from/to の件数毎」に呼ばれ、そのパラメータは、 view が from に指定した id の view、 cursor がその行位置まで移動した状態のカーソル、 columnIndex が to で指定したカーソルのカラムの位置です。
|
3
3
|
つまり『この行のこの view に cursor の 指定カラムのデータをどう表示するのか』だけをするのであって、 cursor を動かす必要はありませんし、 from に指定していない ID の view に関する呼び出しは行われません。 ( setViewValue が呼ばれて false を返した view に関してはその後アダプタが処理します。 )
|