我想创建一个带有 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”,我应该只得到JANUARY
and MAY
。但不是这个,我得到APRIL
and DECEMBER
。事实上,我得到了确切的数据量(此处为 2 行),但从列表的开头开始。我应该怎么办?谢谢。