Top Banner
Copyright© Jeffrey Jongko, Ateneo de Manila University Custom ListAdapter s
11

Copyright© Jeffrey Jongko, Ateneo de Manila University Custom ListAdapters.

Dec 14, 2015

Download

Documents

Carmella Bruce
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Copyright© Jeffrey Jongko, Ateneo de Manila University Custom ListAdapters.

Copyright© Jeffrey Jongko, Ateneo de Manila University

CustomListAdapters

Page 2: Copyright© Jeffrey Jongko, Ateneo de Manila University Custom ListAdapters.

ListAdapter

Acts as the bridge between a ListView and the data that backs the list (the model)

Interface found in android.widget package

Several subtypes are built-in to android

Page 3: Copyright© Jeffrey Jongko, Ateneo de Manila University Custom ListAdapters.

Custom ListAdapters

The true power of the ListView/ ListAdapter combination is the ability to define your own ListAdapter to best suit you application

ListAdapter is simply an interface that needs to be implemented

Page 4: Copyright© Jeffrey Jongko, Ateneo de Manila University Custom ListAdapters.

ListAdapter interface ListAdapter contains several methods inside it that need to

be implemented

Some methods:

public int getCount() - returns the number of items

public Object getItem(int arg0) – returns the object at a given position

public long getItemId(int position) – return a unique ID for a given position

Page 5: Copyright© Jeffrey Jongko, Ateneo de Manila University Custom ListAdapters.

ListAdapter interface

public View getView(int position, View convertView, ViewGroup parent) – returns a view object used to render the data convertView represents an existing recyclable

view that can be modified instead of creating a new view

All the basic ListAdapter methods are implemented in a class BaseAdapter You will need to subtype this and implement the

above methods

Page 6: Copyright© Jeffrey Jongko, Ateneo de Manila University Custom ListAdapters.

Application data Many times application data comes in the form of

lists of objects rather than lists of simple Strings E.g. contacts are composed

Name Phone Number E-mail etc

This is the type of data that is best served by custom adapter classes since you will want to present all these somehow to the user

Page 7: Copyright© Jeffrey Jongko, Ateneo de Manila University Custom ListAdapters.

Creating your own Adapter

The most common customization to an adapter is the row’s layout

Given the many methods present in the ListAdapter interface, it is usually better to subclass BaseAdapter and fill the missing methods as stated earlier

Page 8: Copyright© Jeffrey Jongko, Ateneo de Manila University Custom ListAdapters.

getView()

public View getView(int position, View convertView, ViewGroup parent) – returns a view object used to render the data position – represents the position in your

dataset convertView - represents an existing recyclable

view that can be modified instead of creating a new view

parent – represents the parent (usually the ListView object) that holds this view

Page 9: Copyright© Jeffrey Jongko, Ateneo de Manila University Custom ListAdapters.

Custom views

Views used for layout rows can be easily created using the Graphical EditorCreated the same way as with an Activity

layoutThese are the parsed using a

LayoutInflater instance inside getView() and populated with the proper data

Page 10: Copyright© Jeffrey Jongko, Ateneo de Manila University Custom ListAdapters.

Example

NOTE: getLayoutInflater() is in the Activity class

i.e. you need access to the Activity to use it either as an inner class or pass the Activity to the Adapter

public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = getLayoutInflater(); View view = inflater.inflate(R.layout.row, null); // extract the views to be populated TextView name = (TextView) view.findViewById(R.id.name); TextView phone = (TextView) view.findViewById(R.id.phone); TextView email = (TextView) view.findViewById(R.id.email); // extract the object that will fill these MyContact contact = internalList.get(position); name.setText(contact.getName()); phone.setText(contact.getPhone()); email.setText(contact.getEmail()); // return the view return view; }

Page 11: Copyright© Jeffrey Jongko, Ateneo de Manila University Custom ListAdapters.

Output vs XML

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="TextView" android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <TextView android:text="TextView" android:id="@+id/phone" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <TextView android:text="TextView" android:id="@+id/email" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView></LinearLayout>