■実装
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に使用する文字列 } }
public class OriginalDataRow {
public String name;
@Override
public String toString() {
return name;// filterに使用する文字列
}
}
戻り値を複数指定したい場合はどうすれば良いでしょうか?