回答編集履歴

3

前回の回答コードから Realm 版を作成

2021/11/27 12:29

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -51,3 +51,309 @@
51
51
  app:layout_constraintTop_toBottomOf="@+id/bt_add" />
52
52
 
53
53
  ```
54
+
55
+
56
+
57
+ ----
58
+
59
+
60
+
61
+ 前のご質問の回答の [https://github.com/Jimbe-github/teratail-q370729](https://github.com/Jimbe-github/teratail-q370729) のレイアウトを使って、Realm( と RealmBaseAdapter) で動作するものになりましたので、ご提示させていただきます。
62
+
63
+ ```kotlin
64
+
65
+ import androidx.appcompat.app.AppCompatActivity
66
+
67
+ import android.os.Bundle
68
+
69
+ import android.view.View
70
+
71
+ import android.view.ViewGroup
72
+
73
+ import android.widget.*
74
+
75
+ import androidx.appcompat.app.AlertDialog
76
+
77
+ import io.realm.Realm
78
+
79
+
80
+
81
+ import io.realm.RealmBaseAdapter;
82
+
83
+ import android.view.LayoutInflater
84
+
85
+ import io.realm.RealmObject
86
+
87
+
88
+
89
+ import io.realm.annotations.PrimaryKey
90
+
91
+
92
+
93
+ open class Memo : RealmObject() {
94
+
95
+ @PrimaryKey
96
+
97
+ var name:String = ""
98
+
99
+ var age:Int = 0
100
+
101
+ var text:String = ""
102
+
103
+ }
104
+
105
+
106
+
107
+ class MainActivity : AppCompatActivity() {
108
+
109
+ //lateinit var dba: DatabaseAccesser
110
+
111
+ private lateinit var realm: Realm
112
+
113
+
114
+
115
+ override fun onCreate(savedInstanceState: Bundle?) {
116
+
117
+ super.onCreate(savedInstanceState)
118
+
119
+ setContentView(R.layout.activity_main)
120
+
121
+
122
+
123
+ val et_name : EditText = findViewById(R.id.et_name)
124
+
125
+ val bt_add : Button = findViewById(R.id.bt_add)
126
+
127
+ val bt_delete : Button = findViewById(R.id.bt_delete)
128
+
129
+ val lv : ListView = findViewById(R.id.lv)
130
+
131
+
132
+
133
+ //dba = SQLiteDatabaseAccesser(this)
134
+
135
+ realm = Realm.getDefaultInstance();
136
+
137
+
138
+
139
+ val adapter = RealmMemoAdapter(realm)
140
+
141
+ lv.adapter = adapter
142
+
143
+
144
+
145
+ //bt_addを押すとet_nameに入力した内容をDBに保存とListViewに表示する処理を記載する
146
+
147
+ bt_add.setOnClickListener {
148
+
149
+ if(et_name.text.toString().isEmpty()){
150
+
151
+ AlertDialog.Builder(this)
152
+
153
+ .setTitle("未入力")
154
+
155
+ .setMessage("名前を入力して下さい")
156
+
157
+ .setPositiveButton("OK",null)
158
+
159
+ .show()//et_nameが未入力の場合、アラートダイアログで表示
160
+
161
+ }else{
162
+
163
+ val name = et_name.text.toString()
164
+
165
+ adapter.add(name, 0, "")
166
+
167
+ et_name.text.clear()//DBに書き込みしたらEditTextの文字をクリアする
168
+
169
+ Toast.makeText(applicationContext, "登録しました", Toast.LENGTH_SHORT).show()//トーストで表示
170
+
171
+ }
172
+
173
+ }
174
+
175
+
176
+
177
+ //ListViewをタップするとアラートダイアログを表示して、削除するかしないか判断する
178
+
179
+ //合わせてDBに登録されているデータも一緒に削除する
180
+
181
+ lv.setOnItemClickListener { _, _, position, _ ->
182
+
183
+ AlertDialog.Builder(this)
184
+
185
+ .setTitle("削除しますか??")
186
+
187
+ .setPositiveButton("Yes") { _, _ ->
188
+
189
+ //Yesを押下した時の処理
190
+
191
+ //タップされたところのメモの削除
192
+
193
+ adapter.remove(position)
194
+
195
+ et_name.text.clear()
196
+
197
+ //Toast.makeText(applicationContext,"削除しました",Toast.LENGTH_SHORT).show()
198
+
199
+ }
200
+
201
+ .setNegativeButton("No") { _, _ ->
202
+
203
+ Toast.makeText(applicationContext, "キャンセルしました", Toast.LENGTH_SHORT).show()
204
+
205
+ }
206
+
207
+ .show()
208
+
209
+ }
210
+
211
+ //これは予備コード
212
+
213
+ //DB全削除用
214
+
215
+ bt_delete.setOnClickListener {
216
+
217
+ realm.executeTransactionAsync {
218
+
219
+ it.where(Memo::class.java).findAll().deleteAllFromRealm()
220
+
221
+ }
222
+
223
+ }
224
+
225
+ }
226
+
227
+
228
+
229
+ override fun onDestroy() {
230
+
231
+ super.onDestroy()
232
+
233
+ //dba.destroy()
234
+
235
+ realm.close()
236
+
237
+ }
238
+
239
+ }
240
+
241
+
242
+
243
+ class RealmMemoAdapter(val realm:Realm) : RealmBaseAdapter<Memo>(null) {
244
+
245
+ init {
246
+
247
+ adapterData = realm.where(Memo::class.java).findAll()
248
+
249
+ }
250
+
251
+ class ViewHolder(view: View) {
252
+
253
+ var nameText: TextView
254
+
255
+ var ageText: TextView
256
+
257
+ var textText: TextView
258
+
259
+ init {
260
+
261
+ nameText = view.findViewById(R.id.nameText) as TextView
262
+
263
+ ageText = view.findViewById(R.id.ageText) as TextView
264
+
265
+ textText = view.findViewById(R.id.textText) as TextView
266
+
267
+ }
268
+
269
+ }
270
+
271
+
272
+
273
+ override fun getView(position: Int, view: View?, parent: ViewGroup?): View {
274
+
275
+ val v = view ?:
276
+
277
+ LayoutInflater.from(parent!!.context).inflate(R.layout.row_layout,null).apply {
278
+
279
+ tag = ViewHolder(this)
280
+
281
+ }
282
+
283
+
284
+
285
+ val vh = v.tag as ViewHolder
286
+
287
+ val memo:Memo = adapterData!!.get(position)
288
+
289
+ vh.nameText.text = memo.name
290
+
291
+ vh.ageText.text = memo.age.toString()
292
+
293
+ vh.textText.text = memo.text
294
+
295
+
296
+
297
+ return v
298
+
299
+ }
300
+
301
+
302
+
303
+ fun add(name:String, age:Int, text:String) {
304
+
305
+ realm.executeTransactionAsync(
306
+
307
+ Realm.Transaction {
308
+
309
+ it.createObject(Memo::class.java, name).apply {
310
+
311
+ this.age = age
312
+
313
+ this.text = text
314
+
315
+ }
316
+
317
+ },
318
+
319
+ Realm.Transaction.OnSuccess {
320
+
321
+ notifyDataSetChanged()
322
+
323
+ }
324
+
325
+ )
326
+
327
+ }
328
+
329
+
330
+
331
+ fun remove(position:Int) {
332
+
333
+ adapterData!!.get(position).let {
334
+
335
+ val name = it.name
336
+
337
+ realm.executeTransactionAsync(
338
+
339
+ Realm.Transaction {
340
+
341
+ it.where(Memo::class.java).equalTo("name", name).findFirst()?.deleteFromRealm()
342
+
343
+ },
344
+
345
+ Realm.Transaction.OnSuccess {
346
+
347
+ notifyDataSetChanged()
348
+
349
+ }
350
+
351
+ )
352
+
353
+ }
354
+
355
+ }
356
+
357
+ }
358
+
359
+ ```

2

追記

2021/11/27 12:29

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -1,4 +1,4 @@
1
- していません!
1
+ 動作は確認していません!
2
2
 
3
3
 
4
4
 
@@ -22,9 +22,9 @@
22
22
 
23
23
  ```
24
24
 
25
+ また、レイアウトの ListView の設定を変えないと表示されないかもしれません。
25
26
 
26
-
27
- また、レイアウトの ListView設定をえないと表示されないかもしれません。
27
+ (layout_width,layout_height の変更、layout_constraintBottom_toBottomOf 追加)
28
28
 
29
29
  ```xml
30
30
 

1

Realm.getDefaultInstance() を前に移動

2021/11/26 08:29

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -7,6 +7,12 @@
7
7
 
8
8
 
9
9
  ```kotlin
10
+
11
+ //Realmを使う時に必要
12
+
13
+ val realm = Realm.getDefaultInstance() // <- 前に移動
14
+
15
+
10
16
 
11
17
  val list = mutableListOf(realm.where(user::class.java).findAll())
12
18