我有一個像下面這樣的適配器,並且我使用getFilter方法來篩選列表視圖中的數據。它可以工作,但過濾後,只有過濾的數據。我的意思是,例如,當我過濾usind「test1」關鍵字,那裏有test1,test12,test13 ...,當我刪除最後一個字「測試」 我期望過濾器再次加載整個數據。通過在適配器中使用getFilter()進行篩選,使用篩選數據填充列表
我該如何解決這個問題。
search.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
listAdapter.getFilter().filter(s);
Log.v("textchanged",s.toString());
}
@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
}
});
private class BranchListAdapter extends ArrayAdapter<BranchViewModel>{
private Context context;
private ArrayList<BranchViewModel> itemList;
private int layoutResources;
public BranchListAdapter(Context context, int textViewResourceId,ArrayList<BranchViewModel> objects) {
super(context, textViewResourceId, objects);
this.context = context;
this.itemList = objects;
this.layoutResources = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = LayoutInflater.from(this.context).inflate(this.layoutResources, null);
}
ATextView aTextView =(ATextView) convertView.findViewById(R.id.havalePaymentTypeItemText);
aTextView.setText(itemList.get(position).getBranchCode() +"-"+ itemList.get(position).getBranchName());
return convertView;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,FilterResults results) {
Log.println(Log.INFO, "Results", "FOUND");
itemList.clear();
itemList.addAll((ArrayList<BranchViewModel>) results.values);
Log.e("VALUES","in publish : "+ String.valueOf(itemList.size()));
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
ArrayList<BranchViewModel> FilteredBranchViewModel = new ArrayList<BranchViewModel>();
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < itemList.size(); i++) {
String dataNames = itemList.get(i).getBranchName();
String dataId = itemList.get(i).getBranchCode();
if (dataNames.toLowerCase().startsWith(constraint.toString()) | dataId.toLowerCase().startsWith(constraint.toString())) {
FilteredBranchViewModel.add(itemList.get(i));
}
}
results.count = FilteredBranchViewModel.size();
results.values = FilteredBranchViewModel;
Log.e("VALUES","in filter : "+ String.valueOf(results.count));
return results;
}
};
return filter;
}
或許你應該保持原始數據集的副本 – Blackbelt