public class SpotAdapter extends ArrayAdapter<Spot> {
private ArrayList<Spot> mFilteredList, mUnfilteredList;
private Filter mFilter;
public SpotAdapter(Context context, int resource, List<Spot> items) {
super(context, resource, items);
mUnfilteredList = (ArrayList<Spot>) items;
mFilteredList = (ArrayList<Spot>) items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
v = vi.inflate(R.layout.record_row, null);
}
Spot p = (Spot) mFilteredList.get(position);
if (p != null) {
TextView nameView = (TextView) v.findViewById(R.id.name);
TextView addressView = (TextView) v.findViewById(R.id.address);
TextView typeView = (TextView) v.findViewById(R.id.type);
TextView contactView = (TextView) v.findViewById(R.id.contact);
ImageView starBtn = (ImageView) v.findViewById(R.id.star);
contactView.setVisibility(View.GONE);
nameView.setText(p.name);
addressView.setText(p.address);
typeView.setText(p.type == 1 ? "Leisure" : "Shopping");
starBtn.setTag("" + p.id);
starBtn.setVisibility(p.isStar ? View.VISIBLE : View.GONE);
}
return v;
}
@Override
public Filter getFilter() {
if(mFilter == null) {
mFilter = new Filter() {
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mFilteredList = (ArrayList<Spot>)results.values;
clear();
int count = mFilteredList.size();
for (int i=0; i<count; i++)
{
Spot s = (Spot)mFilteredList.get(i);
add(s);
}
//
// mFilteredList = (ArrayList<Spot>)results.values;
// notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
Log.d("test1","c "+constraint);
Log.d("test1","s "+mUnfilteredList.size());
FilterResults results = new FilterResults();
ArrayList<Spot> newList = new ArrayList<Spot>();
for (Spot obj : mUnfilteredList) {
// Compare the custom object and add to list if match
if (constraint.equals("bookmark")) {
if (obj.isStar == true)
newList.add(obj);
} else if (constraint.equals("select all")) {
newList.add(obj);
}
}
Log.d("test1",""+newList.size());
results.values = newList;
results.count = newList.size();
return results;
}
};
}
return mFilter;
}
}
以上的陣列適配器定製過濾器定製過濾器,我的想法是有兩個過濾選項「書籤」 /「全選」,這意味着選擇所有顯示原始列表,而書籤顯示書籤僅限物品。在Android電子
的問題是,如果我點擊書籤,然後我點擊全選,結果仍是書籤項目。
所以我登錄的結果,我發現,在第二次mUnfilteredList = (ArrayList<Spot>) items;
將重新使未過濾列表只是最後的過濾結果,而不是保持原始列表。我怎樣才能解決問題?
感謝您的幫助
你在做什麼,當你點擊「書籤」?您的適配器是否連接到AutoCompleteTextView?你直接打電話給你的過濾器嗎? – pskink
直接調用過濾器,像這樣sAdapter.getFilter()。filter(「select all」); 。sAdapter.getFilter()過濾器( 「書籤」); – user782104
似乎你應該創建兩個適配器,然後 – pskink