1、ChatAllHistoryAdapter增加接口implements Filterable。
2、重新getFilter方法。
3、将EMConversation conversation = getItem(position);改为EMConversation conversation = list.get(position); ,否则notifyDataSetChanged无法生效。
4、如果出现import error “the type android.widget.Filter.FilterResults is not visible”错误,直接将该import注释即可。
public class ChatAllHistoryAdapter extends ArrayAdapter<EMConversation> implements Filterable{
private LayoutInflater inflater;
private List<EMConversation> list;
private EMConversationFilter filter;
public ChatAllHistoryAdapter(Context context, int textViewResourceId, List<EMConversation> objects) {
super(context, textViewResourceId, objects);
inflater = LayoutInflater.from(context);
this.list = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
......
// EMConversation conversation = getItem(position);
EMConversation conversation = list.get(position);
......
}
@Override
public Filter getFilter()
{
if (filter == null) {
filter = new EMConversationFilter(list);
}
return filter;
}
private class EMConversationFilter extends Filter
{
private List<EMConversation> original;
public EMConversationFilter(List<EMConversation> list)
{
this.original = list;
}
@Override
protected FilterResults performFiltering(CharSequence constraint)
{
FilterResults results = new FilterResults();
List<EMConversation> mList = new ArrayList<EMConversation>();
if (constraint == null || constraint.length() == 0)
{
results.values = original;
results.count = original.size();
}
else
{
for (EMConversation em: original)
{
Log.d("rwb","em.getUserName():"+em.getUserName().toUpperCase());
Log.d("rwb","constraint:"+constraint.toString().toUpperCase());
String sEMname;
if(em.isGroup())
{
sEMname=EMGroupManager.getInstance().getGroup(em.getUserName()).getGroupName().toUpperCase();
}
else
{
sEMname=em.getUserName().toUpperCase();
}
if (sEMname.startsWith(constraint.toString().toUpperCase()) )
{
Log.d("rwb","sEMname=constraint:"+sEMname);
mList.add(em);
}
}
results.values = mList;
results.count = mList.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results)
{
Log.d("rwb","publishResults");
list = (List<EMConversation>)results.values;
notifyDataSetChanged();
}
}
}