Mengisi data spinner android dari SQLite Database dan mendapatkan ID dari item yang dipilih

Hai, ini adalah tutorial bagaiamana mengisi data spinner dari database SQLite dan getselecteditem berdasarkan ID item yang dipilih,


biasanya spinner akan memberikan value item berdasarkan posisi item di spinner, tetapi terkadang ada yang mengharuskan developer untuk mendapatkan ID item yang sudah ditentukan didatabase. seperti contoh dibawah ini saya memiliki data perangkat modem berserta ID perangkatnya, 

table perangkat 
Contoh table diatas didapatkan dari hasil download melalui server lalu disimpan ke database SQLite secara lokal di device android. Tutorial ini merupakan lanjutan dari project yang sudah dikerjakan sebelumnya, saya hanya mengambil bagian parse data ke Spinner. 

let's do this !!

Design layout dengan tampilan seperti contoh layout dibawah ini


Berikut code xml untuk tampilan main yang digunakan pada tutorial ini, silahkan disesuaikan dengan kebutuhan dan kreatifitas masing - masing

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SpinnerActivity">
<android.support.v7.widget.CardView
style="@style/CardView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cardCornerRadius="0dp"
app:cardElevation="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="vertical">
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/style_spinner">
</Spinner>
<EditText
android:id="@+id/rdt_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:focusable="false"
android:hint="Id Perangkat" />
<EditText
android:id="@+id/edt_spinner2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:focusable="false"
android:hint="Nama Perangkat" />
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
view raw Main.xml hosted with ❤ by GitHub

Selanjutnya, tambahkan method getServiceCursor di kelas Database (kelas ini sudah dibuat sebelumnya)

Tambahkan method untuk mendapatkan seluruh perangkat didatabase berdasarkan ID, method ini memanfaatkan Simple Cursor Adapter yaitu adapter yang mudah digunakan untuk memetakan kolom dari kursor ke TextViews atau ImageViews yang didefiniskan dalam file XML. Anda dapat memenentukan kolom mana yang anda inginkan, tampilan mana yang akan menampilkan kolom database. Untuk lengkapnya kalian bisa membaca dokumentasinya disini SimpleCursorAdapter

Source codenya seperti ini
public Cursor getServiceCursor() {
String selectQuery = "SELECT id_perangkat AS _id, * FROM " + AppConst.TABLE_NAME + " WHERE nama_perangkat LIKE '%modem%' UNION SELECT 0 AS nama_perangkat, null, 'Pilih Perangkat' LIMIT 10";
SQLiteDatabase db = this.getWritableDatabase();
return db.rawQuery(selectQuery, null);
}


Terakhir, buat method onItemSelectedListener Spinner 

Gunakan source code ini untuk mendapatkan value berdasarkan ID dan nama perangkat, 

public class MainActivity extends AppCompatActivity {
public Spinner spinner;
public EditText edtSp1, edtSp2;
String POST_ID_PERANGKAT = "id_perangkat";
String POST_NAMA_PERANGKAT ="nama_perangkat";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner);
getSupportActionBar().setTitle("Spinner");
spinner = findViewById(R.id.spinner1);
edtSp1 = findViewById(R.id.rdt_spinner);
edtSp2 = findViewById(R.id.edt_spinner2);
loadspinner();
}
private void loadspinner() {
DBPerangkat dbPerangkat = new DBPerangkat(this);
final Cursor serviceCursor = dbPerangkat.getServiceCursor();
String[] from = {"nama_perangkat"};
int[] to = {android.R.id.text1};
final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_dropdown_item, serviceCursor, from, to, 0){
@Override
public boolean isEnabled(int position) {
return position != 0;
}
@Override
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view = super.getDropDownView(position, convertView, parent);
TextView tv = (TextView) view;
if (position == 0) {
tv.setTextColor(Color.GRAY);
} else {
tv.setTextColor(Color.BLACK);
}
return view;
}
};
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// get value by ID
Object valueID = parent.getSelectedItemId();
edtSp1.setText(String.valueOf(valueID));
//get value by name
Cursor qc = adapter.getCursor();
POST_NAMA_PERANGKAT = qc.getString(qc.getColumnIndex("nama_perangkat"));
edtSp2.setText(POST_NAMA_PERANGKAT);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
}

Mengisi data spinner android dari SQLite Database dan mendapatkan ID dari item yang dipilih Mengisi data spinner android dari SQLite Database dan mendapatkan ID dari item yang dipilih Reviewed by nur on August 20, 2018 Rating: 5

No comments:

Powered by Blogger.