过滤聊天记录界面(自定义getFilter)

本文介绍了一种改进的聊天历史记录适配器实现方法,包括实现Filterable接口、重构getFilter方法、修正getItem方法,并提供了自定义过滤器的具体实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();  
        }    
     
    }
   
    
    
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值