我在对象的listview上实现了edittext搜索。搜索是在第一次发生,但是在按下后退空间时,列表视图不会刷新。我有类似的帖子,并尝试进行更改,但没有任何成效。
_inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
compadapter.getFilter().filter(s.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
我的适配器类
public class ComplaintAdapter extends BaseAdapter implements Filterable {
private Context context;
List<Complaint> complaints = new ArrayList<>();
String serviceName, ticketNumber, locName, raisedDate, complaintDetails, newDate;
Complaint complaint; //OUT POJO CLASS
public ComplaintAdapter(Context context, List<Complaint> complaints) {
this.context = context;
this.complaints = complaints;
}
@Override
public int getCount() {
return complaints.size();
}
@Override
public Object getItem(int position) {
return complaints.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewHolderItem holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.custom_list_view, null, true);
holder = new viewHolderItem();
holder.ticketNumberText = (TextView) convertView.findViewById(R.id.ticketIdSupervisor); //TICKET NUMBER
holder.complaintNameText = (TextView) convertView.findViewById((R.id.complaintNameSupervisor)); //COMPLAINT NAME
holder.raisedDateText = (TextView) convertView.findViewById(R.id.raiseDateSupervisor); //RAISED DATE
convertView.setTag(holder);
} else {
holder = (viewHolderItem) convertView.getTag();
}
complaint = complaints.get(position);
if (complaint != null) {
ticketNumber = complaint.getTicketNumber();
holder.ticketNumberText.setText(ticketNumber);
holder.ticketNumberText.setTag("ticketNumber");
complaintDetails = complaint.getComplaintDetails();
holder.complaintNameText.setText(complaintDetails);
holder.complaintNameText.setTag("complaint");
raisedDate = complaint.getRaisedDate();
newDate = raisedDate.substring(0, 10);
holder.raisedDateText.setText(newDate);
holder.raisedDateText.setTag("raisedDate");
//PASS ALL THE REQUIRED VALUES TO THE COMPLAINT DETAILS CLASS.
//SO WE CAN DISPLAY ALL THE FIELDS IN THAT ACTIVITY
serviceName = complaint.getServiceName(); //SERVICE NAME
locName = complaint.getCallLocationName(); //LOCATION NAME
}
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context.getApplicationContext(), ComplaintDetailsEmployee.class);
intent.putExtra("COMPLAINT NAME", complaintDetails);
intent.putExtra("TICKET NUMBER", ticketNumber);
intent.putExtra("RAISED DATE", newDate);
intent.putExtra("SERVICE NAME", serviceName);
intent.putExtra("LOCATION NAME", locName);
context.startActivity(intent);
}
});
return convertView;
}
public class viewHolderItem {
TextView ticketNumberText, complaintNameText, raisedDateText;
}
//performs search on a listview of items
@Override
public Filter getFilter() {
final Filter filter = new Filter() {
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
complaints = (ArrayList<Complaint>) results.values;
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
ArrayList<Complaint> filteredArrList = new ArrayList<>();
if (complaints == null) {
complaints = new ArrayList<>(complaints);
}
if (constraint == null || constraint.length() == 0) {
results.count = complaints.size();
results.values = complaints;
} else {
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < complaints.size(); i++) {
String data = complaints.get(i).getComplaintDetails();
if (data.toLowerCase().startsWith(constraint.toString())) {
filteredArrList.add(complaints.get(i));
}
}
results.count = filteredArrList.size();
results.values = filteredArrList;
}
return results;
}
};
return filter;
}
}