ListView dan Adapter di Android

ListView adalah tampilan beberapa item dalam bentuk list yang dapat di scroll secara vertikal. Setiap item akan otomatis dimasukkan kedalam list menggunakan Adapter yang datanya di ambil dari array/database/json/dsb. ListView sering digunakan dalam aplikasi Android, seperti kontak, email, twitter, dsb.

Adapter adalah jembatan antara dan AdapterView (contohnya ListView) dengan data. Adapter inilah yang menyediakan akses ke item data dan juga bertanggung jawab untuk membuat sebuah View pada setiap item dalam kumpulan data. Selain itu Adapter juga yang mengelola data model. Jadi, dunia ini butuh adapter.

AdapterOverview

Untuk mengimplementasikannya kita membutuhkan yang namanya pagination. Kenapa kita butuh pagination?

Bayangkan, jika kita membuat aplikasi yang isinya menampilkan semua email dan user bisa melihat semua email dalam satu layout. Apalagi jika perharinya email masuk lebih dari 100, nah jika kita tidak mengimplementasikan pagination, tentu ini akan mempengaruhi performa aplikasi.

Berikut konsep dari Adapter di Android

Adapter di Android
Adapter di Android

Adapter akan memanggil method getView() lalu mengembalikan sebuah view pada setiap item dengan menggunakan adapter view. Method getView() ini lah yang mengatur format layout dan kesesuaian data pada item dengan adapter view. Jika getView() mengambalikan View baru untuk setiap waktu ketika dipanggil, ini akan berpengaruh pada performa aplikasi. Jika kita membuat View baru sebagai solusinya, sebenarnya ini terlalu berlebihan karena ketika view baru telah dibuat, maka view yang lama masih akan tersimpan. Untuk itulah android memiliki fitur yang dinamakan dengan recyles yang berfungsi untuk mendaur ulang view ini. Berikut grafiknya:

Mendaur ulang View di Android
Mendaur ulang View di Android

Pada gambar diatas, mari kita asumsikan  aplikasi nantinua menampilkan daftar bulan dalam bentuk ListView. ListView ini akan menampilkan bulan dari Januari sampai dengan May dan seterusnya jika di scroll. Saat bulan Januari tidak terlihat dari list setelah di scroll kebawah, Adapter View mengirimkan view ini ke recycler. Jadi ketika kita scroll ke atas, method getView() di panggil untuk menampilkan list selanjutnyaa (atau June). Method getView() ini menjadi parameter  yang dinamakan dengan convertview yang menujuk view yang tidak digunakan pada recylver agar menggunakan kembali view baru untuk bulan selanjutnya. Berikut contoh konsep diatas dalam bentuk code:


@Override
publicView getView(intitempos, View convertView, ViewGroup parent) {
//Mengecek jika convertview = null, jika null maka menjalan View.inflate
if (convertView == null){
convertView = View.inflate (context,R.layout.list_content_layout, null);
}
//Jika tidak sama dengan null, kita bisa menggunakan kembali dari recycler
TextView txtcontent = (TextView) convertView.findViewById(R.id.textView1);
ImageView imgcontent = (ImageView) convertView.findViewById(R.id.imageView1);
Paintings paintingcontent = content [itempos];
txtcontent.setText (paintingcontent.imagetitle);
imgcontent.setImageResource(paintingcontent.drawableresid);
returnconvertView;

 

Memanfaatkan AdapterView pada ListView

Contoh implementasi sederhana dari Adapter adalah penggunaan ArrayAdapter seperti berikut:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android&quot;
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/selection"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>

Code diatas hanya berupa tampilan list sederhana untuk wadah data yang akan ditampilkan. Selanjutnya yang kita butuhkan adalah membuat fungsi dan data yang akan ditampilkan, seperti code dibawah ini.


package com.commonsware.android.list;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class ListViewDemo extends ListActivity {
private TextView selection;
private static final String[] items={"lorem", "ipsum", "dolor",
"sit", "amet",
"consectetuer", "adipiscing", "elit", "morbi", "vel",
"ligula", "vitae", "arcu", "aliquet", "mollis",
"etiam", "vel", "erat", "placerat", "ante",
"porttitor", "sodales", "pellentesque", "augue", "purus"};
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
items));
selection=(TextView)findViewById(R.id.selection);
}
@Override
public void onListItemClick(ListView parent, View v, int position,
long id) {
selection.setText(items[position]);
}
}

Saat aplikasi di jalankan, maka akan terlihat seperti ini:

ListView Demo
ListView Demo

Well mungkin cukup sekian pembahasan tentang Adapter di Android, untuk contoh code bisa dilihat di Github ini. Semoga bermanfaat ..


Referensi :

3 thoughts on “ListView dan Adapter di Android

  1. Mantap bro! Mudah dipahami apalagi pake bahasa indo.. hehe

    Tanya, Itu yang bagian
    setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, items));
    selection=(TextView)findViewById(R.id.selection);
    di MainActivity.java

    untuk R.layout.simple_list_item_1, bukannya harus buat file xml-nya ya,. soalnya gak ada di github agan

    Lagi, untuk extends dari ListActivity, kenapa gak pakai AppCombatActivity,. pernah nyoba pakai ListActivity tapi Toolbarnya jadi hilang

    Artikelnya bagus, diterusin bro..

    Like

  2. Kalau dari listview ke listview lagi layout nya bisa gag bro…?
    Conyohnya :
    Kalau di klik item yg ad di listview pertama dia masuk ke listview lagi gtu..?
    Mohon bantuanya…

    Like

Good People write good comments ..