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.
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 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:
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<LinearLayout | |
xmlns:android="http://schemas.android.com/apk/res/android" | |
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
Well mungkin cukup sekian pembahasan tentang Adapter di Android, untuk contoh code bisa dilihat di Github ini. Semoga bermanfaat ..
Referensi :
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..
LikeLike
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…
LikeLike
Terima Kasih untuk informasinya sangat membantu 🙂
LikeLike