Android自定义适配器过滤器正常,但listview未更新

Android自定义适配器过滤器正常,但listview未更新,android,listview,android-listview,Android,Listview,Android Listview,我有一个自定义适配器,可以显示电话列表中的联系人和按钮。正如标题所述,过滤器工作正常(列表计数发生变化),但listview保留相同的数据,如果计数为3,则listview显示前3个条目 适配器的类: public class UserCustomAdapter extends ArrayAdapter<User> { Context context; int layoutResourceId; ArrayList<User> da

我有一个自定义适配器,可以显示电话列表中的联系人和按钮。正如标题所述,过滤器工作正常(列表计数发生变化),但listview保留相同的数据,如果计数为3,则listview显示前3个条目

适配器的类:

     public class UserCustomAdapter extends ArrayAdapter<User> {
     Context context;
     int layoutResourceId;
     ArrayList<User> data = new ArrayList<User>();

    public UserCustomAdapter(Context context, int layoutResourceId,
    ArrayList<User> data) {
      super(context, layoutResourceId, data);
      this.layoutResourceId = layoutResourceId;
      this.context = context;
      this.data = data;
    }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    UserHolder holder = null;

 if (row == null) {
    LayoutInflater inflater = ((Activity) context).getLayoutInflater();
    row = inflater.inflate(layoutResourceId, parent, false);
    holder = new UserHolder();
    holder.textName = (TextView) row.findViewById(R.id.textView1);
    holder.number = (TextView) row.findViewById(R.id.textView2);
    holder.textLocation = (TextView) row.findViewById(R.id.textView3);
    holder.btnEdit = (Button) row.findViewById(R.id.Share);
    holder.btnInvite = (Button) row.findViewById(R.id.button2);
    row.setTag(holder);
 } else {
    holder = (UserHolder) row.getTag();
 }
  final User user = data.get(position);
  holder.textName.setText(user.getName());
  holder.number.setText(user.getNumber());
  holder.textLocation.setText(user.getLocation());

  if(user.isMember())
     holder.btnInvite.setVisibility(View.INVISIBLE);


  return row;
}
你应该使用

final User user = getItem(position);
而不是

final User user = data.get(position);

因为您依赖于
ArrayAdapter
Filter
实现

成功了!!在编写代码时,我完全忘记了我在适配器类中。
final User user = data.get(position);