0

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ます。しかし、これの代わりに と を取得APRILDECEMBERます。実際、正確な量のデータ (ここでは 2 行) を取得しますが、リストの先頭から開始します。私は何をすべきか?ありがとう。

4

1 に答える 1

0

ようやく答えが出ました。adapter.getItem(position)代わりにを使用する必要がありcellData[position]ます。

于 2013-06-18T19:26:09.287 に答える