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);