private class NameFilter extends Filter
{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
constraint = constraint.toString().toLowerCase();
FilterResults result = new FilterResults();
if(constraint != null && constraint.toString().length() > 0)
{
ArrayList<Order> filt = new ArrayList<Order>();
ArrayList<Order> lItems = new ArrayList<Order>();
synchronized (this)
{
lItems.addAll(items);
}
for(int i = 0, l = lItems.size(); i < l; i++)
{
Order m = lItems.get(i);
if(m.getOrderTitle().toLowerCase().contains(constraint)
|| m.getOrderTime().toLowerCase().contains(constraint) ||
m.getOrderPrice().toLowerCase().contains(constraint))
filt.add(m);
}
result.count = filt.size();
result.values = filt;
}
else
{
synchronized(this)
{
result.values = items;
result.count = items.size();
}
}
return result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
filtered = (ArrayList<Order>)results.values;
adapter.notifyDataSetChanged();
adapter.clear();
if(!constraint.equals("")){
for(int i = 0; i < filtered.size(); i++){
adapter.add(filtered.get(i));
adapter.setId(i, filtered.get(i).getOrderId());
}
}
else {
if(orders!=null){
for(int i = 0; i < orders.size(); i++){
adapter.add(orders.get(i));
adapter.setId(i, orders.get(i).getOrderId());
}
}
}
}
}
ListView中的项目来自AsyncTask。当AsyncTask运行时,我希望它停止添加不匹配的项目。现在,如果它已经加载了5个项目并且我使用指定的String进行搜索,那么当AsyncTask继续加载项目时,它会自动将Orders添加到ListView,即使没有匹配。
我该如何解决这个问题?
提前致谢并告诉我这个问题是否不清楚!
答案 0 :(得分:0)
根据您之前提出的问题,如果onProgressUpdate
为空,您可以在EditText
办理登机手续。如果它包含一些文本,那么在那时过滤它。
@Override
protected void onProgressUpdate(Integer... i) {
CharSequence cs = yourEditText.getText().toString(); //Get text
if(!cs.equals("")){ //Check if "cs" contains text
adapter.add(orders.get(i[0])); //Add it to the adapter, then...
adapter.getFilter().filter(cs); //..do your filtering, and...
adapter.notifyDataSetChanged(); //...update your View
}
else { //Otherwise, just add the order to your adapter..
adapter.add(orders.get(i[0]));
}
}
我们始终添加所有订单(即使EditText
包含信息),以确保在EditText
为空时显示所有订单。