回答編集履歴
3
前回の回答コードから Realm 版を作成
answer
CHANGED
@@ -24,4 +24,157 @@
|
|
24
24
|
app:layout_constraintEnd_toEndOf="parent"
|
25
25
|
app:layout_constraintStart_toStartOf="parent"
|
26
26
|
app:layout_constraintTop_toBottomOf="@+id/bt_add" />
|
27
|
+
```
|
28
|
+
|
29
|
+
----
|
30
|
+
|
31
|
+
前のご質問の回答の [https://github.com/Jimbe-github/teratail-q370729](https://github.com/Jimbe-github/teratail-q370729) のレイアウトを使って、Realm( と RealmBaseAdapter) で動作するものになりましたので、ご提示させていただきます。
|
32
|
+
```kotlin
|
33
|
+
import androidx.appcompat.app.AppCompatActivity
|
34
|
+
import android.os.Bundle
|
35
|
+
import android.view.View
|
36
|
+
import android.view.ViewGroup
|
37
|
+
import android.widget.*
|
38
|
+
import androidx.appcompat.app.AlertDialog
|
39
|
+
import io.realm.Realm
|
40
|
+
|
41
|
+
import io.realm.RealmBaseAdapter;
|
42
|
+
import android.view.LayoutInflater
|
43
|
+
import io.realm.RealmObject
|
44
|
+
|
45
|
+
import io.realm.annotations.PrimaryKey
|
46
|
+
|
47
|
+
open class Memo : RealmObject() {
|
48
|
+
@PrimaryKey
|
49
|
+
var name:String = ""
|
50
|
+
var age:Int = 0
|
51
|
+
var text:String = ""
|
52
|
+
}
|
53
|
+
|
54
|
+
class MainActivity : AppCompatActivity() {
|
55
|
+
//lateinit var dba: DatabaseAccesser
|
56
|
+
private lateinit var realm: Realm
|
57
|
+
|
58
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
59
|
+
super.onCreate(savedInstanceState)
|
60
|
+
setContentView(R.layout.activity_main)
|
61
|
+
|
62
|
+
val et_name : EditText = findViewById(R.id.et_name)
|
63
|
+
val bt_add : Button = findViewById(R.id.bt_add)
|
64
|
+
val bt_delete : Button = findViewById(R.id.bt_delete)
|
65
|
+
val lv : ListView = findViewById(R.id.lv)
|
66
|
+
|
67
|
+
//dba = SQLiteDatabaseAccesser(this)
|
68
|
+
realm = Realm.getDefaultInstance();
|
69
|
+
|
70
|
+
val adapter = RealmMemoAdapter(realm)
|
71
|
+
lv.adapter = adapter
|
72
|
+
|
73
|
+
//bt_addを押すとet_nameに入力した内容をDBに保存とListViewに表示する処理を記載する
|
74
|
+
bt_add.setOnClickListener {
|
75
|
+
if(et_name.text.toString().isEmpty()){
|
76
|
+
AlertDialog.Builder(this)
|
77
|
+
.setTitle("未入力")
|
78
|
+
.setMessage("名前を入力して下さい")
|
79
|
+
.setPositiveButton("OK",null)
|
80
|
+
.show()//et_nameが未入力の場合、アラートダイアログで表示
|
81
|
+
}else{
|
82
|
+
val name = et_name.text.toString()
|
83
|
+
adapter.add(name, 0, "")
|
84
|
+
et_name.text.clear()//DBに書き込みしたらEditTextの文字をクリアする
|
85
|
+
Toast.makeText(applicationContext, "登録しました", Toast.LENGTH_SHORT).show()//トーストで表示
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
//ListViewをタップするとアラートダイアログを表示して、削除するかしないか判断する
|
90
|
+
//合わせてDBに登録されているデータも一緒に削除する
|
91
|
+
lv.setOnItemClickListener { _, _, position, _ ->
|
92
|
+
AlertDialog.Builder(this)
|
93
|
+
.setTitle("削除しますか??")
|
94
|
+
.setPositiveButton("Yes") { _, _ ->
|
95
|
+
//Yesを押下した時の処理
|
96
|
+
//タップされたところのメモの削除
|
97
|
+
adapter.remove(position)
|
98
|
+
et_name.text.clear()
|
99
|
+
//Toast.makeText(applicationContext,"削除しました",Toast.LENGTH_SHORT).show()
|
100
|
+
}
|
101
|
+
.setNegativeButton("No") { _, _ ->
|
102
|
+
Toast.makeText(applicationContext, "キャンセルしました", Toast.LENGTH_SHORT).show()
|
103
|
+
}
|
104
|
+
.show()
|
105
|
+
}
|
106
|
+
//これは予備コード
|
107
|
+
//DB全削除用
|
108
|
+
bt_delete.setOnClickListener {
|
109
|
+
realm.executeTransactionAsync {
|
110
|
+
it.where(Memo::class.java).findAll().deleteAllFromRealm()
|
111
|
+
}
|
112
|
+
}
|
113
|
+
}
|
114
|
+
|
115
|
+
override fun onDestroy() {
|
116
|
+
super.onDestroy()
|
117
|
+
//dba.destroy()
|
118
|
+
realm.close()
|
119
|
+
}
|
120
|
+
}
|
121
|
+
|
122
|
+
class RealmMemoAdapter(val realm:Realm) : RealmBaseAdapter<Memo>(null) {
|
123
|
+
init {
|
124
|
+
adapterData = realm.where(Memo::class.java).findAll()
|
125
|
+
}
|
126
|
+
class ViewHolder(view: View) {
|
127
|
+
var nameText: TextView
|
128
|
+
var ageText: TextView
|
129
|
+
var textText: TextView
|
130
|
+
init {
|
131
|
+
nameText = view.findViewById(R.id.nameText) as TextView
|
132
|
+
ageText = view.findViewById(R.id.ageText) as TextView
|
133
|
+
textText = view.findViewById(R.id.textText) as TextView
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
override fun getView(position: Int, view: View?, parent: ViewGroup?): View {
|
138
|
+
val v = view ?:
|
139
|
+
LayoutInflater.from(parent!!.context).inflate(R.layout.row_layout,null).apply {
|
140
|
+
tag = ViewHolder(this)
|
141
|
+
}
|
142
|
+
|
143
|
+
val vh = v.tag as ViewHolder
|
144
|
+
val memo:Memo = adapterData!!.get(position)
|
145
|
+
vh.nameText.text = memo.name
|
146
|
+
vh.ageText.text = memo.age.toString()
|
147
|
+
vh.textText.text = memo.text
|
148
|
+
|
149
|
+
return v
|
150
|
+
}
|
151
|
+
|
152
|
+
fun add(name:String, age:Int, text:String) {
|
153
|
+
realm.executeTransactionAsync(
|
154
|
+
Realm.Transaction {
|
155
|
+
it.createObject(Memo::class.java, name).apply {
|
156
|
+
this.age = age
|
157
|
+
this.text = text
|
158
|
+
}
|
159
|
+
},
|
160
|
+
Realm.Transaction.OnSuccess {
|
161
|
+
notifyDataSetChanged()
|
162
|
+
}
|
163
|
+
)
|
164
|
+
}
|
165
|
+
|
166
|
+
fun remove(position:Int) {
|
167
|
+
adapterData!!.get(position).let {
|
168
|
+
val name = it.name
|
169
|
+
realm.executeTransactionAsync(
|
170
|
+
Realm.Transaction {
|
171
|
+
it.where(Memo::class.java).equalTo("name", name).findFirst()?.deleteFromRealm()
|
172
|
+
},
|
173
|
+
Realm.Transaction.OnSuccess {
|
174
|
+
notifyDataSetChanged()
|
175
|
+
}
|
176
|
+
)
|
177
|
+
}
|
178
|
+
}
|
179
|
+
}
|
27
180
|
```
|
2
追記
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
※
|
1
|
+
※動作は確認していません!
|
2
2
|
|
3
3
|
初期データの読み込みであれば、 adapter を作る際に findAll で読み込みしては如何でしょうか。
|
4
4
|
|
@@ -10,8 +10,8 @@
|
|
10
10
|
val adapter = ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1, list)
|
11
11
|
lv.adapter = adapter
|
12
12
|
```
|
13
|
-
|
14
13
|
また、レイアウトの ListView の設定を変えないと表示されないかもしれません。
|
14
|
+
(layout_width,layout_height の変更、layout_constraintBottom_toBottomOf 追加)
|
15
15
|
```xml
|
16
16
|
<ListView
|
17
17
|
android:id="@+id/lv"
|
1
Realm.getDefaultInstance() を前に移動
answer
CHANGED
@@ -3,6 +3,9 @@
|
|
3
3
|
初期データの読み込みであれば、 adapter を作る際に findAll で読み込みしては如何でしょうか。
|
4
4
|
|
5
5
|
```kotlin
|
6
|
+
//Realmを使う時に必要
|
7
|
+
val realm = Realm.getDefaultInstance() // <- 前に移動
|
8
|
+
|
6
9
|
val list = mutableListOf(realm.where(user::class.java).findAll())
|
7
10
|
val adapter = ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1, list)
|
8
11
|
lv.adapter = adapter
|