androidでArrayAdapterを使う
■実装
mListView = (ListView) findViewById(R.id.list); mListView.setAdapter(mOriginalArrayAdapter);
mOriginalArrayAdapterを生成するとする。
public class OriginalArrayAdapter extends ArrayAdapter<OriginalDataRow> {
private LayoutInflater inflater;
/**
* セル内における可変要素
*/
public static class ViewHolder {
public TextView text;
}
public OriginalArrayAdapter(Context context, int textViewResourceId, ArrayList<OriginalDataRow> data) {
super(context, textViewResourceId, data);
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final OriginalDataRow data = getItem(position);// フィールドなどから取得してはいけない...(a)
// viewのセットアップ
ViewHolder holder = null;
if (convertView == null){
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.cell_original_data, null);
holder.text = (TextView) convertView.findViewById(R.id.text);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
// dataをviewに書き出す
holder.text.setText(data.text);
return convertView;
}
}
filterを使用する
@Override
public void onTextChanged(CharSequence s, int start, int count, int after) {
String query = mEditText.getText().toString();
if (query.equals("")) {
mListView.clearTextFilter();
}
else {
mListView.setFilterText(query);
}
}
(a)の部分でsuperクラスのgetItemを使用しないとフィルタリングが上手く適用されない。また、filterを使用する場合は、リストアイテムのtoString値が使用されるため、以下のように必要に応じてOverrideする必要がある。
public class OriginalDataRow {
public String name;
@Override
public String toString() {
return name;// filterに使用する文字列
}
}
TrackBack URL :
Comments (0)