在Listview上搜索无法按下退格键

时间:2016-03-14 07:46:45

标签: android listview

我在对象的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;

}

}

0 个答案:

没有答案