SearchView searchView = findViewById(R.id.searchView);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
System.out.println(newText);
if (newText.isEmpty())
adapter.notifyDataSetChanged();
return false;
}
});
package com.xy.heying.constact.adapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.xy.heying.constact.cn.CNPinyin;
import com.xy.heying.constact.search.Contact;
import com.xy.heying.constact.stickyheader.StickyHeaderAdapter;
import java.util.ArrayList;
import java.util.List;
import com.xy.heying.R;
public class ContactAdapter extends RecyclerView.Adapter<ContactHolder> implements StickyHeaderAdapter<HeaderHolder> , Filterable {
private List<CNPinyin<Contact>> mSourceList = new ArrayList<>();
private List<CNPinyin<Contact>> mFilterList = new ArrayList<>();
public ContactAdapter(List<CNPinyin<Contact>> cnPinyinList) {
this.mSourceList = cnPinyinList;
this.mFilterList = cnPinyinList;
}
@Override
public int getItemCount() {
return mFilterList.size();
}
@NonNull
@Override
public ContactHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ContactHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.activity_main_item, parent, false));
}
@Override
public void onBindViewHolder(ContactHolder holder, final int position) {
final Contact contact = mFilterList.get(position).data;
holder.iv_header.setImageResource(contact.imgUrl);
holder.tv_name.setText(contact.name);
holder.tv_phone_num.setText(contact.phonenum);
holder.ll_constact_item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
@Override
public long getHeaderId(int childAdapterPosition) {
return mFilterList.get(childAdapterPosition).getFirstChar();
}
@Override
public void onBindHeaderViewHolder(HeaderHolder holder, int childAdapterPosition) {
holder.tv_header.setText(String.valueOf(mFilterList.get(childAdapterPosition).getFirstChar()));
}
@Override
public HeaderHolder onCreateHeaderViewHolder(ViewGroup parent) {
return new HeaderHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_header, parent, false));
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
mFilterList = mSourceList;
} else {
List<CNPinyin<Contact>> filteredList = new ArrayList<>();
for (CNPinyin<Contact> str : mSourceList) {
if (str.data.name.contains(charString)) {
filteredList.add(str);
}
}
mFilterList = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = mFilterList;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
mFilterList = (List<CNPinyin<Contact>>) filterResults.values;
notifyDataSetChanged();
}
};
}
}