Menghapus data dari tabel database dalam Android Kotlin

 

 

 

 

 

Merubah file UserDao

Bukalah file UserDao.kt lalu masukan kode berikut ini:

@Query("DELETE FROM user WHERE id = :id")
suspend fun hapusById(id: Int)

Keterangan:

  • suspend digunakan agar fungsi ini dijalankan secara asynkronous dan tidak memblokir view
  • Fungsi suspend ini harus dipanggil dalam coroutin

 

Membuat Variabel Global dari FrameLayout

Bukalah file SecondFragment.kt lalu buatlah kode ini di atas fungsi onCreate:

lateinit var wadah: FrameLayout

Keterangan:

  • lateinit digunakan agar pemberian nilai ke variabel bisa dilakukan nanti
  • Variabel wadah ini untuk mengambil container layout

 

Membuat Fungsi refreshView

Masih dalam file SecondFragment.kt lalu buatlah fungsi refreshView seperti dibawah ini:

fun refreshView(){

parentFragmentManager.beginTransaction()
.detach(this)
.commit()
parentFragmentManager.beginTransaction()
.attach(this)
.commit()

}

Keterangan:

  • Fungsi ini untuk merefresh fragment agar setelah menghapus data pada tabel maka tampilan pada fragment akan direfresh dan menampilkan data yang terbaru

 

Membuat Fungsi bikinTombol

Masih dalam file SecondFragment.kt lalu buatlah fungsi bikinTombol seperti dibawah ini:

fun bikinTombol(teks:String, id: Int, indeks: Int){

val tombol = Button(activity).apply {

text = “Hapus “+teks

layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT
)

}
val params = tombol.layoutParams as ViewGroup.MarginLayoutParams
if(indeks==0)
params.marginStart =5
else
params.marginStart +=200

params.topMargin = 70

tombol.layoutParams = params

wadah.addView(tombol)

tombol.setOnClickListener {

lifecycleScope.launch {
vm.userDao.hapusById(id)
refreshView()

}

}

}

Keterangan:

  • FrameLayout.LayoutParams -> kode ini digunakan menentukan lebar dan tinggi layout tombol
  • ViewGroup.MarginLayoutParams -> kode ini digunakan untuk menentukan jarak layout tombol dari wadahnya
  • params.marginStart adalah jarak dari kiri
  • params.topMargin adalah jarak dari atas
  • wadah.addView(tombol) -> kode ini untuk memasukkan objek tombol ke dalam objek wadah
  • tombol.setOnClickListener -> kode ini berarti jika tombol ditekan maka akan melakukan aksi
  • lifecycleScope.launch digunakan untuk menjalankan fungsi coroutine
  • vm.userDao.hapusById(id) -> kode ini adalah fungsi coroutine yang digunakan untuk menghapus baris tabel berdasarkan kolom id

 

Merubah Fungsi onViewCreated

Masih dalam file SecondFragment.kt lalu rubahlah kode pada metode onViewCreated menjadi seperti berikut ini:

wadah = view.findViewById<FrameLayout>(R.id.viewSecondFragment);

val tekview:TextView = view.findViewById<TextView>(R.id.txtTampil);

lifecycleScope.launch {

var dataUser = vm.userDao.ambilSemua()

val teks = dataUser.joinToString(separator = “\n”) { user ->
“Nama : ${user.nama}, Hobi: ${user.hobi}”
}

withContext(Dispatchers.Main) {

tekview.setText(teks)
dataUser.forEachIndexed { indeks, orang ->

bikinTombol(orang.nama, orang.id, indeks)

}

}

}

Keterangan:

  • withContext(Dispatchers.Main) -> kode ini digunakan untuk memperbarui tampilan dari coroutine
  • dataUser.forEachIndexed -> Kode ini berarti saya akan melakukan perulangan pada objek dataUser untuk mengambil nilai dari setiap baris datanya

Jalankan Aplikasi

Pilih virtual devicemu lalu tekan tombol Play