0
我有一個arrayAdapter,它是用SearchView過濾的。過濾工作,但我的問題是,它也清理不應該被編輯另一個實體:Android ArrayAdapter performFilter清理所有值
public class LvSecurityAdapter extends ArrayAdapter<Security> implements Filterable{
private ArrayList<Security> allSecurities;
private ArrayList<Security> securities;
private Context ctx;
public LvSecurityAdapter(Context ctx, int tvResourceInt, ArrayList<Security> securities) {
super(ctx, tvResourceInt, securities);
this.securities = securities;
this.allSecurities = securities;
this.ctx = ctx;
}
@Override
public int getCount() {
return this.securities.size();
}
@SuppressLint("InflateParams")
@Override
public View getView(final int position, View view, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.row_lv_security, null);
Security security = securities.get(position);
final ImageView img = (ImageView) view.findViewById(R.id.ivTipologia);
final TextView tvName = (TextView) view.findViewById(R.id.tvName);
final TextView tvDescription = (TextView) view.findViewById(R.id.tvDescription);
final TextView tvTags = (TextView) view.findViewById(R.id.tvTags);
img.setBackground(ctx.getDrawable(security.getTipology().getImageId()));
tvName.setText(security.getName());
tvDescription.setText(security.getDescription());
tvTags.setText(security.getTag());
return view;
}
private void notifyThis(ArrayList<Security> values){
securities.clear();
securities.addAll(values);
this.notifyDataSetChanged();
}
@Override
public Filter getFilter() {
return new Filter(){
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
notifyThis((ArrayList<Security>)results.values);
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
ArrayList<Security> securitiesFilteredLocal = new ArrayList<>();
for (Security s : allSecurities){
if(s.getName().toLowerCase().contains(constraint.toString().toLowerCase()) ||
s.getDescription().toLowerCase().contains(constraint.toString().toLowerCase())||
s.getTag().toLowerCase().contains(constraint.toString().toLowerCase())||
s.getTipology().getName().toLowerCase().contains(constraint.toString().toLowerCase())){
securitiesFilteredLocal.add(s);
}
}
results.count = securitiesFilteredLocal.size();
results.values = securitiesFilteredLocal;
return results;
}
};
}
}
正如你可以看到我有我的構造兩個實體:securities
和allSecurities
。
securities
是填充適配器和被過濾的實體。
allSecurities
是一個幫手實體。我需要它,因爲過濾後,如果我從過濾器中刪除了一些字符,我需要檢索所有實體並再次執行過濾器,但是當我過濾結果並將它們保存到securities
時,它也會將過濾結果放入allSecurities
。
我的問題很簡單:爲什麼它覆蓋我的實體,如果它永遠不會被編輯訪問?我怎樣才能避免壓倒一切?
感謝所有
我完全忘記了內存參考,非常感謝! :) –
(需要5分鐘才能接受,我在等待它) –
不客氣。很高興我能幫上忙。 –