回答編集履歴
3
前回の回答コードから Realm 版を作成
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
追記
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
|
-
|
27
|
+
(layout_width,layout_height の変更、layout_constraintBottom_toBottomOf 追加)
|
28
28
|
|
29
29
|
```xml
|
30
30
|
|
1
Realm.getDefaultInstance() を前に移動
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
|
|