0

我想创建一个带有 EditText 作为搜索栏的 ListView。我的 ListView 包含不同类型的自定义单元格(每个单元格只有一个字符串),所以我使用 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”,我应该只得到JANUARYand MAY。但不是这个,我得到APRILand DECEMBER。事实上,我得到了确切的数据量(此处为 2 行),但从列表的开头开始。我应该怎么办?谢谢。

4

1 回答 1

0

Ok 终于得到答案了,需要用adapter.getItem(position)代替cellData[position].

于 2013-06-18T19:26:09.287 回答