Cara Membuat Fungsi Delete dan Update pada SQLite Database
Pada tutorial ini, kita akan belajar Cara Membuat Fungsi Delete dan Update pada SQLite Database, tutorial ini merupakan materi lanjutan dari tutorial yang saya bahas sebelumnya, yaitu Cara Menampilka Data SQLite pada RecyclerView, jadi saya sarankan kalian sudah mengikuti dan juga membuat project tersebut sebelumnya.
Pada materi yang akan kita pelajari hari ini, kita akan belajar cara menghapus dan juga mengedit data yang tersimpan pada SQLite Database, sebelumnya kita sudah belajar cara menampilkan dat SQLite pada RecyclerView, pada tutorial ini, kita dapat menghapus dan update data tersebut melalui RecyclerView.
Untuk itu kita akan menambahkan Menu Navigasi seperti menu OverFlow pada layout/list item RecyclerView tersebut. untuk menampikan menu pilihan pada Menu Overflow, kita akan menggunakan Menu Popup untuk menampilkan menu pilihan berupa Delete dan Update pada masing-masing item.
Cara Membuat Fungsi Delete dan Update pada SQLite Database
Pertama kita perlu membuat menunya terlebih dahulu, caranya : Klik kanan pada direktori res > New > Android resource directory. lalu berinama file tersebut, misalnya "popup_menu". setelah itu klik Ok.
Selanjutnya buat menu tersebut dengan menggunakan kode xml, untuk membuatnya, kita perlu menambahkan tag <item> dan juga beberapa atribut tambahan lalinnya, seperti id, title, dsb.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/delete"
android:title="Delete"/>
<item android:id="@+id/update"
android:title="Update"/>
</menu>
Buat Icon Menu Overflownya, klik kanan pada dir res > New > Image Asset.Selanjnya kita edit layout design pada RecyclerView, buka file view_design.xml, kita akan menambahkan ImgeButton sebagai menu navigasi utuk icon tersebut, kalian edit menjadi seperti berikut ini:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/item_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:orientation="vertical">
<ImageView
android:id="@+id/image"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
app:srcCompat="@drawable/unpi" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_toLeftOf="@+id/overflow"
android:layout_toRightOf="@+id/image"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="2dp"
android:text="Nama"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/NIM"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="NIM"
android:textSize="14sp" />
<TextView
android:id="@+id/jurusan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="Jurusan"
android:textSize="14sp" />
</LinearLayout>
<ImageButton
android:id="@+id/overflow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="#FFF9F9F9"
app:srcCompat="@drawable/ic_overflow" />
</RelativeLayout>
View:A.Menghapus Data Dari Database
1) Buka RecyclerViewAdapter kalian, lalu tambahkan Context dan juga ImageButton didalam class ViewHolder, seperti ini:
public class RecyclerViewAdapter extends RecyclerView.Adapter{
private ArrayList namaList; //Digunakan untuk Nama
private ArrayList jurusanList; //Digunakan untuk Jurusan
private ArrayList nimList; //Digunakan untuk Jurusan
private Context context; //Membuat Variable Context
//Membuat Konstruktor pada Class RecyclerViewAdapter
RecyclerViewAdapter(ArrayList namaList, ArrayList jurusanList, ArrayList nimList){
this.namaList = namaList;
this.jurusanList = jurusanList;
this.nimList = nimList;
}
//ViewHolder Digunakan Untuk Menyimpan Referensi Dari View-View
class ViewHolder extends RecyclerView.ViewHolder{
private TextView Nama, Jurusan, Nim;
private ImageButton Overflow;
ViewHolder(View itemView) {
super(itemView);
//Mendapatkan Context dari itemView yang terhubung dengan Activity ViewData
context = itemView.getContext();
//Menginisialisasi View-View untuk kita gunakan pada RecyclerView
Nama = itemView.findViewById(R.id.name);
Jurusan = itemView.findViewById(R.id.jurusan);
Overflow = itemView.findViewById(R.id.overflow);
Nim = itemView.findViewById(R.id.NIM);
}
}
2) Lalu didalam method onBindViewHoler(), tambahkan onClickListener pada ImageButton tersebut, didalamnya akan kita tambahkan Popup menu pada onClicListener tersebut, seperti berikut ini:
public void onBindViewHolder(final ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
//Memanggil Nilai/Value Pada View-View Yang Telah Dibuat pada Posisi Tertentu
final String Nama = namaList.get(position);//Mengambil data (Nama) sesuai dengan posisi yang telah ditentukan
final String Jurusan = jurusanList.get(position);//Mengambil data (Jurusan) sesuai dengan posisi yang telah ditentukan
final String NIM = nimList.get(position);//Mengambil data (NIM) sesuai dengan posisi yang telah ditentukan
holder.Nama.setText(Nama);
holder.Jurusan.setText(Jurusan);
holder.Nim.setText(NIM);
//Mengimplementasikan Menu Popup pada Overflow (ImageButton)
holder.Overflow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
//Membuat Instance/Objek dari PopupMenu
PopupMenu popupMenu = new PopupMenu(view.getContext(), view);
popupMenu.inflate(R.menu.popup_menu);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.delete:
//Menghapus Data Dari Database
DBMahasiswa getDatabase = new DBMahasiswa(view.getContext());
SQLiteDatabase DeleteData = getDatabase.getWritableDatabase();
//Menentukan di mana bagian kueri yang akan dipilih
String selection = DBMahasiswa.MyColumns.NIM + " LIKE ?";
//Menentukan Nama Dari Data Yang Ingin Dihapus
String[] selectionArgs = {holder.Nim.getText().toString()};
DeleteData.delete(DBMahasiswa.MyColumns.NamaTabel, selection, selectionArgs);
//Menghapus Data pada List dari Posisi Tertentu
int position = nimList.indexOf(NIM);
nimList.remove(position);
notifyItemRemoved(position);
Toast.makeText(view.getContext(),"Data Dihapus",Toast.LENGTH_SHORT).show();
break;
case R.id.update:
//Statement Update
break;
}
return true;
}
});
popupMenu.show();
}
});
}
Pada menu overflow yang sudah kita buat tadi sebelumnya, menggunakan ImageButton, saat menu tersebut diklik, maka akan muncul 2 buah menu Popup, yaitu Delete dan Update.
Untuk menghapus Data dari Database SQLite, pertama kita hapus membuat Instance/Objek dan juga context dengan class database kita, yaitu DBMahasiswa, dengan parameter view.getContext().
Pada variable selection, kita menentukan Bagian Nama Query yang akan dipilih, pada contoh tersebut kita memilih Kolom NIM, sebagai acuan untuk menghapus data. Jadi artinya, kita dapat menghapus salah satu data dari database berdasarkan NIM item yang dipilih.
Pada variable Array selectionArgs, digunakan untuk menentukan NIM dari Data yang akan dihapus, NIM tersebut didapat dari masing-masing item, terdantung posisinya. Jadi kita dapat menghapus data tersebut berdasarkan NIM pada item didalam RecyclerView.
Dan yang terakhir, digunakan untuk menghapus Item dari RecyclerView, supaya saat kita mengklik menu Delete, maka secara realtime item yang kita pilih pada RecyclerView akan menghilang.
Demo:
B.Mengedit Data Dari Database
1) Pertama kita akan membuat Activity baru, berinama "UpdateActivity", activity tersebut akan kita gunakan untuk mengedit data dari Database, disini kita hanya akan mengupdate atau mengubah Nama, NIM dan Jurusan pada setiap Item yang dipilih.
Untuk itu kalian buat activitynya seperti berikut ini:
Untuk itu kalian buat activitynya seperti berikut ini:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
android:orientation="vertical"
tools:context="android.cianjur.developer.net.sqliteexample.UpdateActivity">
<EditText
android:id="@+id/new_nim"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="NIM Baru"
android:inputType="textPersonName" />
<EditText
android:id="@+id/new_nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Nama Baru"
android:inputType="textPersonName" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="Fakultas/Jurusan:" />
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/new_jurusan"
android:entries="@array/daftar_jurusan"
android:padding="15dp">
</Spinner>
<Button
android:id="@+id/new_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Simpan Data Baru" />
</LinearLayout>
2) Buka kembali RecyclerViewAdapter, tambahkan baris kode berikut ini pada Item didalam Popup menu:
case R.id.update:
Intent dataForm = new Intent(view.getContext(), UpdateActivity.class);
dataForm.putExtra("SendNIM", holder.Nim.getText().toString());
dataForm.putExtra("SendNama", holder.Nama.getText().toString());
context.startActivity(dataForm);
((Activity)context).finish();
break;
Disana kita menggunakan Intent untuk berpindah activity, serta Mempassing/Kirim Data, NIM pada activity selanjutnya, untuk kita kirim pada ActivityUpdate, NIM tersebut digunakan untuk menentukan Data mana yang ingin di Update.Lalu kita panggil variable context yang sudah kita buat tadi sebelumnya, untuk mengeksekusi Intent tersebut.
3) Buka file UpdateActivity.java, masukan source code berikut ini:
package android.cianjur.developer.net.sqliteexample;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
public class UpdateActivity extends AppCompatActivity {
private DBMahasiswa MyDatabase;
private EditText NewNIM, NewNama;
private Spinner NewJurusan;
private String getNewNIM, getNewNama, getNewJurusan;
private Button Update;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update);
getSupportActionBar().setTitle("Masukan Data Baru");
MyDatabase = new DBMahasiswa(getBaseContext());
NewNIM = findViewById(R.id.new_nim);
NewNama = findViewById(R.id.new_nama);
NewJurusan = findViewById(R.id.new_jurusan);
//Menerima Data Nama dan NIM yang telah dipilih Oleh User untuk diposes
NewNama.setText(getIntent().getExtras().getString("SendNama");
NewNim.setText(getIntent().getExtras().getString("SendNIM");
Update = findViewById(R.id.new_data);
Update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setUpdateData();
startActivity(new Intent(UpdateActivity.this, ViewData.class));
finish();
}
});
}
private void setUpdateData(){
getNewNIM = NewNIM.getText().toString();
getNewNama = NewNama.getText().toString();
getNewJurusan = NewJurusan.getSelectedItem().toString();
SQLiteDatabase database = MyDatabase.getReadableDatabase();
//Memasukan Data baru pada 3 kolom (NIM, Nama dan Jurusan)
ContentValues values = new ContentValues();
values.put(DBMahasiswa.MyColumns.Nama, getNewNama);
values.put(DBMahasiswa.MyColumns.Jurusan, getNewJurusan);
values.put(DBMahasiswa.MyColumns.NIM, getNewNIM);
//Untuk Menentukan Data/Item yang ingin diubah, berdasarkan NIM
String selection = DBMahasiswa.MyColumns.NIM + " LIKE ?";
String[] selectionArgs = {GetNIM};
database.update(DBMahasiswa.MyColumns.NamaTabel, values, selection, selectionArgs);
Toast.makeText(getApplicationContext(), "Berhasil Diubah", Toast.LENGTH_SHORT).show();
}
}
Projectnya Bisa Kalian Download di Github Saya.Terimakasih atas kunjungannya, Semoga tutorial yang saya berikan bisa bermanfaat untuk kalian semua, jika ada yang ingin ditanyakan, silakan kontak saya atau isi komentar dibawah ini, selebihnya mohon maaf bila ada kesalahan.
Wassalamualaikum Warahmatullahi Wabarakatuh.