School of Information Systems

BaseAdapter dan ArrayAdapters dalam Pemrograman Android

BaseAdapter

BaseAdapter adalah sebuah base class umum dari sebuah implementasi umum untuk sebuah Adapter yang bisa digunakan untuk ListView dengan mengimplementasikan ListAdapter Interfaces dan Spinner dengan mengimplementasikan SpinnerAdapter interdace.

Berikut adalah contoh codingan untuk menggunakan BaseAdapter :

1. Create Model Class

Untuk bisa menggunakan BaseAdapter pertama harus dibuat dulu ListView di dalam codingannya. Di dalam row ListView, pertama harus ada mengandung View Object dimana untuk contoh ini akan menggunakan Item Name dan Item Description. Jadi dalam class Item.java buatlah codingan berikut :

public class Item {

private String itemName;

private String itemDescription;

public Item(String name, String description) {

this.itemName = name;

this.itemDescription = description;

}

public String getItemName() {

return this.itemName;

}

public String getItemDescription() {

return itemDescription;

}

}

2. Edit Layout ListView

Selanjutnya, pada file xml kita membuat codingan LinearLayout yang berisi TextView untuk memunculkan ItemName dan ItemDescription di ListViewnya.

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:orientation=”vertical”>

android:id=”@+id/text_view_item_name”

android:layout_width=”match_parent”

android:layout_height=”wrap_content” />

android:id=”@+id/text_view_item_description”

android:layout_width=”match_parent”

android:layout_height=”wrap_content” />

3. Create Custom BaseAdapter Implementation

Pada Tahap ini, mulailah kita untuk membuat codingan untuk mengimplementasikan BaseAdapter ke ListView yang baru saja dibuat. Berikut adalah contoh codingannya :

public class CustomListAdapter extends BaseAdapter {

private Context context; //context

private ArrayList items; //data source of the list adapter

//public constructor

public CustomListAdapter(Context context, ArrayList items) {

this.context = context;

this.items = items;

}

@Override

public int getCount() {

return items.size(); //returns total of items in the list

}

@Override

public Object getItem(int position) {

return items.get(position); //returns list item at the specified position

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

// inflate the layout for each list row

if (convertView == null) {

convertView = LayoutInflater.from(context).

inflate(R.layout.layout_list_view_row_items, parent, false);

}

// get current item to be displayed

Item currentItem = (Item) getItem(position);

// get the TextView for item name and item description

TextView textViewItemName = (TextView)

convertView.findViewById(R.id.text_view_item_name);

TextView textViewItemDescription = (TextView)

convertView.findViewById(R.id.text_view_item_description);

//sets the text for item name and item description from the current item object

textViewItemName.setText(currentItem.getItemName());

textViewItemDescription.setText(currentItem.getItemDescription());

// returns the view for the current row

return convertView;

}

}

ArrayAdapters

ArrayAdapters adalah adapter yang simple yang biasanya digunakan untuk mengubah ArrayList sebuah object menjadi View item yang dimasukkan ke dalam ListView Container. ArrayAdapter ini bisa muat diantara ArrayList (sumber data) dan ListView (representasi visual) dan mengkonfigurasi 2 aspek yaitu Array manay yang akan digunakan sebagai sumber data dalam list, dan bagaimana untuk mengubah item di dalam array menjadi View Object yang berkorespondensi.

Berikut adalah contoh kodingan Array Adapters :

1. Create Model Class

Seperti di contoh codingan BaseAdapter pertama kita harus membuat dulu ListView dalam class. Untuk contoh ini kita akan menggunakan View Object User dan Hometown. Berikut adalah contoh kodingannya :

public class User {

public String name;

public String hometown;

public User(String name, String hometown) {

this.name = name;

this.hometown = hometown;

}

}

2. Edit Layout ListView

Pada tahap berikutnya, kita mulai membuat membuat codingan LinearLayout yang berisi TextView untuk memunculkan User dan Hometown di ListViewnya. Berikut adalah codingan nya :

android:layout_width=”match_parent”

android:layout_height=”match_parent” >

android:id=”@+id/tvName”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:text=”Name” />

android:id=”@+id/tvHome”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:text=”HomeTown” />

3. Defining the Adapter

Selanjutnya, kita harus define adapter untuk bisa menjelaskan proses mengubah Java Object menjadi View Object. Berikut adalah codingan tersebut :

public class UsersAdapter extends ArrayAdapter {

public UsersAdapter(Context context, ArrayList users) {

super(context, 0, users);

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

// Get the data item for this position

User user = getItem(position);

// Check if an existing view is being reused, otherwise inflate the view

if (convertView == null) {

convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_user, parent, false);

}

// Lookup view for data population

TextView tvName = (TextView) convertView.findViewById(R.id.tvName);

TextView tvHome = (TextView) convertView.findViewById(R.id.tvHome);

// Populate the data into the template view using the data object

tvName.setText(user.name);

tvHome.setText(user.hometown);

// Return the completed view to render on screen

return convertView;

}

}

4. Attaching Adapter to ListView

Sekarang, kita bisa menggunakan adaptor itu di aktivitas untuk menampilkan larik item ke dalam ListView. Berikut adalah codingan tersebut :

// Construct the data source

ArrayList arrayOfUsers = new ArrayList();

// Create the adapter to convert the array to views

UsersAdapter adapter = new UsersAdapter(this, arrayOfUsers);

// Attach the adapter to a ListView

ListView listView = (ListView) findViewById(R.id.lvItems);

listView.setAdapter(adapter);

Perbedaan BaseAdapter dengan ArrayAdapter

Perbedaan antara BaseAdapter dengan ArrayAdapter adalah BaseAdapter adalah adapter yang sangat umum yang memungkinkan kita melakukan hampir semua hal yang kita inginkan. Namun, kita harus melakukan sedikit lebih banyak pengkodean sendiri untuk membuatnya berfungsi. Sedangkan ArrayAdapter adalah implementasi yang lebih lengkap yang berfungsi dengan baik untuk data dalam array atau ArrayLists.

Reference :

https://guides.codepath.com/android/using-an-arrayadapter-with-listview · https://guides.codepath.com/android/using-a-baseadapter-with-listview · https://stackoverflow.com/questions/16796182/whats-the-difference-between-baseadapter-and-arrayadapter