0
我從服務器列出不同的數據。考慮我的列表中有5種不同類型的數據。我想根據一個數據過濾列表。爲此我寫了下面的代碼。Android:ListView過濾器不能正常工作
eventFilter = (EditText) rootView.findViewById(R.id.eventFilter);
eventFilter.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
search_data = s.toString();
}
});
Button searchbtn = (Button) rootView.findViewById(R.id.searchbtn);
searchbtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
search = new SearchFilter(context, cts);
search.getFilter().filter(search_data);
}
});
在上面的代碼中,只是將文本值傳遞給SearchFilter。
@Override
public Filter getFilter() {
// TODO Auto-generated method stub
if(cFilter==null)
{
cFilter=new CustomFilter();
}
return cFilter;
}
public class CustomFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence prefix) {
FilterResults results = new FilterResults();
if (mOriginalValues == null) {
synchronized (mLock) {
mOriginalValues = new ArrayList<CalEvent>(event);
}
}
if (prefix == null || prefix.length() == 0) {
ArrayList<CalEvent> list;
synchronized (mLock) {
list = new ArrayList<CalEvent>(mOriginalValues);
}
results.values = list;
results.count = list.size();
} else {
String prefixString = prefix.toString().toLowerCase();
ArrayList<CalEvent> values;
synchronized (mLock) {
values = new ArrayList<CalEvent>(mOriginalValues);
}
final int count = values.size();
final ArrayList<CalEvent> newValues = new ArrayList<CalEvent>();
for (int i = 0; i < count; i++) {
CalEvent value=values.get(i);
EventType type = EventType.getEventType(value.event_type);
String valueText = type.name.toLowerCase();
if (valueText.indexOf(prefixString)!=-1) {
newValues.add(value);
Toast.makeText(ctx, value.toString(), Toast.LENGTH_SHORT).show();
Log.i("value.toString",value.toString());
} else {
ProjectEventFragment.cts.clear();
ProjectEventFragment.adapter.notifyDataSetChanged();
}
}
results.values = newValues;
results.count = newValues.size();
}
return results;
}
}
這裏,如果我輸入一些數據,是不在列表中可用,則該列表應該是空的,或者如果可用,那麼它應該列出基於可用的數據。如果數據不可用,那麼我正在清除並設置爲notifyDataSetChanged
。當我輸入非可用數據時,列表將刪除所有數據。但是,當我輸入可用數據時,它不會顯示所有數據。
我不知道我在哪裏做錯了。請糾正我。