SimpleCursorAdapter は、簡単で便利だけど、ListView で任意の行で特殊な処理が必要な時は辛い。
final ListView listview = (ListView)findViewById(R.id.listView);
である場合、SimpleCursorAdapter は、以下のとおり書けるのは魅力的
listview.setAdapter(new SimpleCursorAdapter(this
,android.R.layout.simple_list_item_2
,cursor
,new String{"name","telno"}
,new int{android.R.id.text1,android.R.id.text2)
);
これを、CursorAdapte で記述するなら、
listview.setAdapter(new CursorAdapter(this,cursor,false){
@Override
public View newView(Context context,Cursor cursor,ViewGroup parent){
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(android.R.layout.simple_list_item_2,parent,false);
bindView(view,context,cursor);
return view;
}
@Override
public void bindView(View view,Context context,Cursor cursor){
TextView name = (TextView)view.findViewById(android.R.id.text1);
name.setText(cursor.getString(cursor.getColumnIndex("name")));
// 任意のレコードで、TextView の属性を変更する。
TextView telno = (TextView)view.findViewById(android.R.id.text2);
telno.setText(cursor.getString(cursor.getColumnIndex("telno")));
}
});
そして、レコードの追加は、
*1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
((CursorAdapter)listview.getAdapter()).changeCursor(timeDB.queryAll());
*2.notifyDataSetChanged();
}
});