回答編集履歴

6

修正

2022/10/06 04:09

投稿

jimbe
jimbe

スコア13209

test CHANGED
@@ -110,8 +110,8 @@
110
110
  public void onCreate(SQLiteDatabase db) {
111
111
  db.execSQL("CREATE TABLE table1 (_id INTEGER PRIMARY KEY, name TEXT, toggle INTEGER)");
112
112
 
113
- db.execSQL("INSERT INTO table1 (_id,name,toggle) values (1,'ABC',0)");
113
+ db.execSQL("INSERT INTO table1 (_id,name,toggle) VALUES (1,'ABC',0)");
114
- db.execSQL("INSERT INTO table1 (_id,name,toggle) values (2,'XYZ',1)");
114
+ db.execSQL("INSERT INTO table1 (_id,name,toggle) VALUES (2,'XYZ',1)");
115
115
  }
116
116
 
117
117
  @Override

5

コード追加

2022/10/05 19:23

投稿

jimbe
jimbe

スコア13209

test CHANGED
@@ -7,3 +7,119 @@
7
7
  →[Y.A.M の 雑記帳 - Android SimpleCursorAdapter で ViewBinder を使う](http://y-anz-m.blogspot.com/2011/10/simplecursoradapter-viewbinder.html?m=0)
8
8
 
9
9
  getView を上書きしてどうにかしたいのでしたら、 SimpleCursorAdapter のソースコードを確認してどのようにすれば良いのかを調べるべきに思います。
10
+
11
+ ----
12
+
13
+ MainActivity.java
14
+ ```java
15
+ import androidx.appcompat.app.AppCompatActivity;
16
+ import androidx.appcompat.widget.SwitchCompat;
17
+ import androidx.cursoradapter.widget.SimpleCursorAdapter;
18
+
19
+ import android.database.Cursor;
20
+ import android.database.sqlite.*;
21
+ import android.os.Bundle;
22
+ import android.widget.ListView;
23
+
24
+ public class MainActivity extends AppCompatActivity {
25
+ @Override
26
+ protected void onCreate(Bundle savedInstanceState) {
27
+ super.onCreate(savedInstanceState);
28
+ setContentView(R.layout.activity_main);
29
+
30
+ SQLiteOpenHelper helper = new DatabaseHelper(this);
31
+ SQLiteDatabase db = helper.getReadableDatabase();
32
+ Cursor cursor = db.rawQuery("SELECT _id,name,toggle FROM table1", null);
33
+
34
+ SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.list_item, cursor,
35
+ new String[]{"_id", "name", "toggle"},
36
+ new int[]{R.id.id, R.id.name, R.id.toggle},
37
+ 0);
38
+ adapter.setViewBinder((v, c, i) -> {
39
+ if(i == c.getColumnIndex("toggle")) {
40
+ ((SwitchCompat)v).setChecked(c.getInt(i) == 1);
41
+ return true;
42
+ }
43
+ return false;
44
+ });
45
+
46
+ ListView listview = findViewById(R.id.listview);
47
+ listview.setAdapter(adapter);
48
+ }
49
+ }
50
+ ```
51
+ res/layout/activity_main.xml
52
+ ```xml
53
+ <?xml version="1.0" encoding="utf-8"?>
54
+ <ListView
55
+ android:id="@+id/listview"
56
+ xmlns:android="http://schemas.android.com/apk/res/android"
57
+ xmlns:tools="http://schemas.android.com/tools"
58
+ android:layout_width="match_parent"
59
+ android:layout_height="match_parent"
60
+ tools:context=".MainActivity" />
61
+ ```
62
+ res/layout/list_item.xml
63
+ ```xml
64
+ <?xml version="1.0" encoding="utf-8"?>
65
+ <androidx.constraintlayout.widget.ConstraintLayout
66
+ xmlns:android="http://schemas.android.com/apk/res/android"
67
+ xmlns:app="http://schemas.android.com/apk/res-auto"
68
+ android:layout_width="match_parent"
69
+ android:layout_height="wrap_content">
70
+
71
+ <androidx.appcompat.widget.SwitchCompat
72
+ android:id="@+id/toggle"
73
+ android:layout_width="wrap_content"
74
+ android:layout_height="0dp"
75
+ android:paddingEnd="10dp"
76
+ app:layout_constraintBottom_toBottomOf="parent"
77
+ app:layout_constraintStart_toStartOf="parent"
78
+ app:layout_constraintTop_toTopOf="parent" />
79
+ <TextView
80
+ android:id="@+id/id"
81
+ android:layout_width="0dp"
82
+ android:layout_height="wrap_content"
83
+ android:text="_id"
84
+ app:layout_constraintEnd_toEndOf="parent"
85
+ app:layout_constraintStart_toEndOf="@id/toggle"
86
+ app:layout_constraintTop_toTopOf="parent" />
87
+ <TextView
88
+ android:id="@+id/name"
89
+ android:layout_width="0dp"
90
+ android:layout_height="wrap_content"
91
+ android:text="name"
92
+ app:layout_constraintEnd_toEndOf="parent"
93
+ app:layout_constraintStart_toEndOf="@id/toggle"
94
+ app:layout_constraintTop_toBottomOf="@id/id" />
95
+ </androidx.constraintlayout.widget.ConstraintLayout>
96
+ ```
97
+ DatabaseHelper.java
98
+ ```java
99
+ import android.content.Context;
100
+ import android.database.sqlite.*;
101
+
102
+ import androidx.annotation.*;
103
+
104
+ public class DatabaseHelper extends SQLiteOpenHelper {
105
+ public DatabaseHelper(@Nullable Context context) {
106
+ super(context, "testdb", null, 1);
107
+ }
108
+
109
+ @Override
110
+ public void onCreate(SQLiteDatabase db) {
111
+ db.execSQL("CREATE TABLE table1 (_id INTEGER PRIMARY KEY, name TEXT, toggle INTEGER)");
112
+
113
+ db.execSQL("INSERT INTO table1 (_id,name,toggle) values (1,'ABC',0)");
114
+ db.execSQL("INSERT INTO table1 (_id,name,toggle) values (2,'XYZ',1)");
115
+ }
116
+
117
+ @Override
118
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
119
+ db.execSQL("DROP TABLE IF EXISTS table1");
120
+ onCreate(db);
121
+ }
122
+ }
123
+ ```
124
+ 実行結果
125
+ ![エミュレータスクリーンショット](https://ddjkaamml8q8x.cloudfront.net/questions/2022-10-06/96fa6cfb-4e66-4d70-b020-3f0c3775735a.png)

4

リンク修正

2022/10/05 18:17

投稿

jimbe
jimbe

スコア13209

test CHANGED
@@ -4,6 +4,6 @@
4
4
 
5
5
  と書かれていますので、トグルボタンには対応していません。
6
6
  対応していないビューに対して動作させたい場合は、 [SimpleCursorAdapter.ViewBinder](https://developer.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder) を用いるようです。
7
- →[Y.A.M の 雑記帳 - Android SimpleCursorAdapter で ViewBinder を使う](http://y-anz-m.blogspot.com/2011/10/simplecursoradapter-viewbinder.html?m=1)
7
+ →[Y.A.M の 雑記帳 - Android SimpleCursorAdapter で ViewBinder を使う](http://y-anz-m.blogspot.com/2011/10/simplecursoradapter-viewbinder.html?m=0)
8
8
 
9
9
  getView を上書きしてどうにかしたいのでしたら、 SimpleCursorAdapter のソースコードを確認してどのようにすれば良いのかを調べるべきに思います。

3

追加

2022/10/05 17:26

投稿

jimbe
jimbe

スコア13209

test CHANGED
@@ -4,5 +4,6 @@
4
4
 
5
5
  と書かれていますので、トグルボタンには対応していません。
6
6
  対応していないビューに対して動作させたい場合は、 [SimpleCursorAdapter.ViewBinder](https://developer.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder) を用いるようです。
7
+ →[Y.A.M の 雑記帳 - Android SimpleCursorAdapter で ViewBinder を使う](http://y-anz-m.blogspot.com/2011/10/simplecursoradapter-viewbinder.html?m=1)
7
8
 
8
9
  getView を上書きしてどうにかしたいのでしたら、 SimpleCursorAdapter のソースコードを確認してどのようにすれば良いのかを調べるべきに思います。

2

追加

2022/10/05 17:09

投稿

jimbe
jimbe

スコア13209

test CHANGED
@@ -3,5 +3,6 @@
3
3
  「カーソルから XML ファイルで定義された TextViews または ImageViews に列をマップするための簡単なアダプター。」by Google翻訳
4
4
 
5
5
  と書かれていますので、トグルボタンには対応していません。
6
+ 対応していないビューに対して動作させたい場合は、 [SimpleCursorAdapter.ViewBinder](https://developer.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder) を用いるようです。
6
7
 
7
- getView を上書きしてでもどうにかしたいのでしたら、 SimpleCursorAdapter のソースコードを確認してどのようにすれば良いのかを調べるべきに思います。
8
+ getView を上書きしてどうにかしたいのでしたら、 SimpleCursorAdapter のソースコードを確認してどのようにすれば良いのかを調べるべきに思います。

1

追加

2022/10/05 17:05

投稿

jimbe
jimbe

スコア13209

test CHANGED
@@ -3,3 +3,5 @@
3
3
  「カーソルから XML ファイルで定義された TextViews または ImageViews に列をマップするための簡単なアダプター。」by Google翻訳
4
4
 
5
5
  と書かれていますので、トグルボタンには対応していません。
6
+
7
+ getView を上書きしてでもどうにかしたいのでしたら、 SimpleCursorAdapter のソースコードを確認してどのようにすれば良いのかを調べるべきに思います。