Adapter

View、Adapter、Dataの関係(他サイトを参照)

常用のAdapter実装クラス

ArrayAdapter データソース:Sring[]或いはList<String>

SimpleAdapter データソース:List<? extends Map<String, ?>>

SimpleCursorAdapter データソース:Cursor

ArrayAdapter

public ArrayAdapter (Context context, int textViewResourceId, T[] objects)

書き方1

String[] strs = {"a", "b", "c"};

ArrayAdapter<String> adapter

= new ArrayAdapter<String>(this, R.layout.listview1, strs);

setListAdapter(adapter);

書き方2

List<String> data = new ArrayList<String>();

data.add("a");

data.add("b");

data.add("c");

ListView listView = new ListView(this);

listView.setAdapter(new ArrayAdapter<String>(this, R.layout.listview1, data));

setContentView(listView);

SimpleAdapter

public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

List<Map<String,Object>> lists = new ArrayList<Map<String,Object>>();

for(int i = 0; i < 3; i++){

Map<String,Object> map=new HashMap<String,Object>();

map.put("img", R.drawable.icon);

map.put("id", i);

map.put("name", "AAA" + i);

lists.add(map);

}

String[] from = {"img", "id", "name"};

int[] to = {R.id.img, R.id.txtId, R.id.txtName};

SimpleAdapter adapter

= new SimpleAdapter(this, lists, R.layout.listview1, from, to);

setListAdapter(adapter);

SimpleCursorAdapter

public SimpleCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to)

Cursor cur = getContentResolver().query(TABLE_PERSON, null, null, null, null);

startManagingCursor(cur);

String[] from = {"ID", "NAME"};

int[] to = {R.id.txtId, R.id.txtName};

ListAdapter adapter

= new SimpleCursorAdapter(this, R.layout.listview1, cur, from, to);

setListAdapter(adapter);

※権限設定

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>

自作Adapter

import java.util.List;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ArrayAdapter;

import android.widget.TextView;

public class PersonAdapter extends ArrayAdapter<Person> {

private Context context;

private LayoutInflater inflater;

public PersonAdapter(Context context, List<Person> objects) {

this(context, 0, objects);

}

public PersonAdapter(Context context, int textViewResourceId, List<Person> objects) {

super(context, textViewResourceId, objects);

this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

this.context = context;

}

@Override

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

ViewHolder holder = null;

if(convertView == null) {

holder = new ViewHolder();

convertView = this.inflater.inflate(R.layout.person, null);

holder.lbl_id = (TextView)convertView.findViewById(R.id.lbl_id);

holder.lbl_name = (TextView)convertView.findViewById(R.id.lbl_name);

convertView.setTag(holder);

} else {

holder = (ViewHolder)convertView.getTag();

}

Person person = this.getItem(position);

if(person != null) {

holder.lbl_id.setText(person.getId());

holder.lbl_name.setText(person.getName());

}

return convertView;

}

static class ViewHolder {

TextView lbl_id;

TextView lbl_name;

}

}

// 利用側

List<Person> persons = new ArrayList<Person>();

for(int i = 0; i < 3; i++){

Person person = new Person();

person.setId(101 + i);

person.setName("AAA");

persons.add(person);

}

PersonAdapter adapter = new PersonAdapter(this, persons);

setListAdapter(adapter);