回答編集履歴

6

追記

2022/12/13 03:17

投稿

jimbe
jimbe

スコア12644

test CHANGED
@@ -33,3 +33,6 @@
33
33
  }
34
34
  }
35
35
  ```
36
+
37
+ なお、ビューの表示内容を変えることを「xmlの変更」と表現されてもかなり伝わり難いと思います。
38
+ レイアウト xml 自体は静的なもので、アプリから変更するようなモノではありません。

5

コード追加

2022/12/13 03:13

投稿

jimbe
jimbe

スコア12644

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

修正

2022/12/13 02:51

投稿

jimbe
jimbe

スコア12644

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 に指定していない ID の view に関する呼び出しは行われません**。 ( アダプタにとっては from/to に指定していないビューは存在しないも同じです。 )
3
+ つまり『この行のこの view に cursor の 指定カラムのデータをどう表示するのか』だけをするのであって、cursor を動かす必要はありませんし、 **from/to に指定していない columnIndex/view に関する呼び出しは行われません**。 ( アダプタにとっては from/to に指定していないビューは存在しないも同じです。 )

3

from と to の間違い

2022/12/13 02:50

投稿

jimbe
jimbe

スコア12644

test CHANGED
@@ -1,3 +1,3 @@
1
1
  ViewBinder の使い方が間違われています。
2
- ViewBinder の setViewValue メソッドは「リストの各行毎の、 SimpleCursorAdapter のコンストラクタの from/to の件数毎」に呼ばれ、そのパラメータは、 view が from に指定した id の view、 cursor がその行位置まで移動した状態のカーソル、 columnIndex が to で指定したカーソルのカラムの位置です。
2
+ ViewBinder の setViewValue メソッドは「リストの各行毎の、 SimpleCursorAdapter のコンストラクタの from/to の件数毎」に呼ばれ、そのパラメータは、 view が to に指定した id の view、 cursor がその行位置まで移動した状態のカーソル、 columnIndex が from で指定したカラムの位置です。
3
- つまり『この行のこの view に cursor の 指定カラムのデータをどう表示するのか』だけをするのであって、cursor を動かす必要はありませんし、 **from に指定していない ID の view に関する呼び出しは行われません**。 ( アダプタにとっては from/to に指定していないビューは存在しないも同じです。 )
3
+ つまり『この行のこの view に cursor の 指定カラムのデータをどう表示するのか』だけをするのであって、cursor を動かす必要はありませんし、 **to に指定していない ID の view に関する呼び出しは行われません**。 ( アダプタにとっては from/to に指定していないビューは存在しないも同じです。 )

2

修正

2022/12/13 02:37

投稿

jimbe
jimbe

スコア12644

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 の 指定カラムのデータをどう表示するのか』だけをするのであって、 cursor を動かす必要はありませんし、 from に指定していない ID の view に関する呼び出しは行われません。 ( setViewValue が呼ばれて false を返した view してはその後アダプタが処理す。 )
3
+ つまり『この行のこの view に cursor の 指定カラムのデータをどう表示するのか』だけをするのであって、cursor を動かす必要はありませんし、 **from に指定していない ID の view に関する呼び出しは行われません**。 ( アダプタにとっ from/to指定していないビュー存在ないも同じです。 )

1

脱字

2022/12/13 02:34

投稿

jimbe
jimbe

スコア12644

test CHANGED
@@ -1,3 +1,3 @@
1
1
  ViewBinder の使い方が間違われています。
2
- ViewBinder の setViewValue メソッドは「リストの各行毎のさら SimpleCursorAdapter のコンストラクタの fromto の件数毎」に呼ばれ、そのパラメータは、 view が from に指定した id の view、 cursor がその行位置まで移動した状態のカーソル、 columnIndex が to で指定したカーソルのカラムの位置です。
2
+ ViewBinder の setViewValue メソッドは「リストの各行毎の SimpleCursorAdapter のコンストラクタの from/to の件数毎」に呼ばれ、そのパラメータは、 view が from に指定した id の view、 cursor がその行位置まで移動した状態のカーソル、 columnIndex が to で指定したカーソルのカラムの位置です。
3
3
  つまり『この行のこの view に cursor の 指定カラムのデータをどう表示するのか』だけをするのであって、 cursor を動かす必要はありませんし、 from に指定していない ID の view に関する呼び出しは行われません。 ( setViewValue が呼ばれて false を返した view に関してはその後アダプタが処理します。 )