我想创建一个带有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月1月4月
如果我在搜索字段中写“Y”,我应该只获得JANUARY
和MAY
。
但不是这样,我得到APRIL
和DECEMBER
。
事实上,我得到了确切的数据量(这里是2行),但是从列表的开头开始。
我该怎么办?感谢。
答案 0 :(得分:0)
好的,最后得到了答案,需要使用adapter.getItem(position)
代替cellData[position]
。