【发布时间】:2017-06-26 00:01:32
【问题描述】:
我在过滤器列表视图中遇到了一些问题,例如,当退格过滤器、列表视图未更新以及 val 搜索为空时,在这种情况下 Listview 未显示。这是我的代码:
public class ListDataFriendsAdapter extends ArrayAdapter<ListDataFriends> implements View.OnClickListener {
private List<ListDataFriends> FilterData = new ArrayList<>();
private List<ListDataFriends> OriginalData = new ArrayList<>();
Activity activity;
ListDataFriendssFilter mListDataFriendssFilter;
public ListDataFriendsAdapter(Activity activity, List<ListDataFriends> data) {
super(activity, android.R.layout.simple_list_item_1, data);
this.OriginalData = data;
this.FilterData = data;
this.activity = activity;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
ListDataFriends friends = getItem(position);
ViewHolder holder;
if (view != null) {
holder = (ViewHolder) view.getTag();
} else {
LayoutInflater inflater = LayoutInflater.from(getContext());
view = inflater.inflate(R.layout.item_sugest_friends, parent, false);
holder = new ViewHolder(view);
view.setTag(holder);
}
holder.fullName.setText(!TextUtils.isNullOrEmpty(friends.getFullName()) ? friends.getFullName() : "-");
holder.email.setText(!TextUtils.isNullOrEmpty(friends.getEmailAddress()) ? friends.getEmailAddress() : "-");
holder.phoneNumber.setText(!TextUtils.isNullOrEmpty(friends.getMobileNumber()) ? friends.getMobileNumber() : "-");
return view;
}
class ViewHolder {
@BindView(R.id.photo)
AvatarView photo;
@BindView(R.id.full_name)
RobotoBoldTextView fullName;
@BindView(R.id.email)
RobotoRegularTextView email;
@BindView(R.id.phone_number)
RobotoRegularTextView phoneNumber;
ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
@Override
public Filter getFilter() {
if (mListDataFriendssFilter == null)
mListDataFriendssFilter = new ListDataFriendssFilter();
return mListDataFriendssFilter;
}
// Filter
private class ListDataFriendssFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
constraint = constraint.toString().toLowerCase();
FilterResults result = new FilterResults();
if (constraint != null && constraint.toString().length() > 0) {
ArrayList<ListDataFriends> filteredItems = new ArrayList<ListDataFriends>();
for (int i = 0, l = OriginalData.size(); i < l; i++) {
ListDataFriends country = OriginalData.get(i);
if (country.getFullName().toLowerCase().contains(constraint))
filteredItems.add(country);
}
result.count = filteredItems.size();
result.values = filteredItems;
} else {
synchronized (this) {
result.values = OriginalData;
result.count = OriginalData.size();
}
}
return result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
FilterData = (ArrayList<ListDataFriends>) results.values;
notifyDataSetChanged();
clear();
for (int i = 0, l = FilterData.size(); i < l; i++)
add(FilterData.get(i));
notifyDataSetInvalidated();
}
}
那么如何解决呢?对不起我的英语
【问题讨论】: