我有一个自定义适配器,它显示电话列表中的联系人和对应的按钮。正如标题所说,过滤器工作正常(列表计数更改)但 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;
}
用户类是
public class User {
String name;
String number;
String location;
boolean member;
@Override
public final String toString(){
Log.e("Sent to filter", name);
return name;
}
+plus all getters and setters
}
最佳答案
你应该使用
final User user = getItem(position);
代替
final User user = data.get(position);
因为您依赖于ArrayAdapter
的Filter
实现。
关于Android 自定义适配器过滤器正常但 ListView 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31294856/