EditText を検索バーとして使用して ListView を作成したいと考えています。私の ListView にはさまざまな種類のカスタム セル (それぞれに 1 つの文字列のみ) が含まれているため、次のように ArrayAdapter を使用します。
LayoutInflater inflater;
MyAdapter adapter;
// Then...
private class MyAdapter extends ArrayAdapter<String>
{
String[] cellData;
public MyAdapter(Context context, int resource, int textViewResourceId, String[] objects)
{
super(context, resource, textViewResourceId, objects);
cellData = objects;
}
@Override
public View getView(int position, View view, ViewGroup parent)
{
View viewCE = inflater.inflate(R.layout.my_cell, parent, false);
((TextView) viewCE.findViewById(R.id.text_my_cell)).setText(cellData[position]);
view = viewCE;
return view;
}
}
これはかなりうまくいきます。次に、それを EditText フィールドと混ぜようとしたので、アクティビティで宣言しました。
EditText inputSearch;
次に、textChanged メソッドにフィルターを追加します。
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
MyActivity.this.adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
問題は次のとおりです。たとえば、リストに次のものが含まれている場合:
4月 12月 1月 5月
検索フィールドに「Y」と入力すると、 と のみが取得JANUARY
されMAY
ます。しかし、これの代わりに と を取得APRIL
しDECEMBER
ます。実際、正確な量のデータ (ここでは 2 行) を取得しますが、リストの先頭から開始します。私は何をすべきか?ありがとう。