Android 如何像默认联系人列表视图那样使用自动完成文本视图对列表视图进行排序?

Android 如何像默认联系人列表视图那样使用自动完成文本视图对列表视图进行排序?,android,listview,android-listview,autocomplete,Android,Listview,Android Listview,Autocomplete,我对我的自动完成文本视图有疑问。在这里,我试图根据在自动完成文本视图中键入的文本过滤listview。我从json解析中获取值。自动完成文本视图在下拉列表中正确显示其所有值。但在listview中,我看不到任何变化 下面是我的listview适配器代码: public class EventListAdapter extends BaseAdapter implements Filterable { public static LayoutInflater inflator =

我对我的自动完成文本视图有疑问。在这里,我试图根据在自动完成文本视图中键入的文本过滤listview。我从json解析中获取值。自动完成文本视图在下拉列表中正确显示其所有值。但在listview中,我看不到任何变化

下面是我的listview适配器代码:

    public class EventListAdapter extends BaseAdapter implements Filterable {

    public static LayoutInflater inflator =  null;

    private  ArrayList<EventsBean> mOriginalvalues = new ArrayList<EventsBean>();

    private ArrayList<EventsBean> mDisplayvalues;

    ImageLoader imageloader;

    public String datenew,datetime,date_text_value,timenew;

    public int date_text,year;

    public String time,month,description;

    public EventListAdapter( ArrayList<EventsBean> mEventarraylist,Activity activity) {
        super();
        //this.context = context;
        this.mOriginalvalues = mEventarraylist;
        inflator =(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageloader=new ImageLoader(activity.getApplicationContext());


    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mOriginalvalues.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        View holder;

        holder = inflator.inflate(R.layout.activity_list_items, parent, false);

        TextView txt_name = (TextView)holder.findViewById(R.id.textname);
        TextView txt_owner_name = (TextView)holder.findViewById(R.id.ownername);
        TextView txt_time = (TextView)holder.findViewById(R.id.date);
        TextView txt_date = (TextView)holder.findViewById(R.id.txt_date_value);
        TextView txt_month = (TextView)holder.findViewById(R.id.txt_month_value);
        TextView txt_year = (TextView)holder.findViewById(R.id.txt_year_value);

        ImageView userimg = (ImageView)holder.findViewById(R.id.imageView1);

        txt_name.setText(mOriginalvalues.get(position).getName());
        txt_owner_name.setText(mOriginalvalues.get(position).getOwner_name());
        String url = mOriginalvalues.get(position).getSource();

        date_text_value = mOriginalvalues.get(position).getStart_time();


        parseDateFromString(date_text_value);

        txt_date.setText(String.valueOf(date_text));
        txt_month.setText(month);
        txt_year.setText(String.valueOf(year));

        Log.i("TEST", "Date:" + date_text_value);

        Log.i("TAG", "Country:" + mOriginalvalues.get(position).getCountry());

        imageloader.DisplayImage(url, userimg);

        txt_time.setText(timenew);
        //userimg.getFitsSystemWindows();

        return holder;
    }


    @SuppressLint("SimpleDateFormat")
    public Date parseDateFromString(String aDateString){
        SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

        Calendar c = Calendar.getInstance();
        Date date= new Date();
        try {

            date= inputFormat.parse(aDateString);

            System.out.println(date);

            SimpleDateFormat day = new SimpleDateFormat("dd-MMM-yyyy");
            SimpleDateFormat time = new SimpleDateFormat("hh:mm a", Locale.getDefault());

            SimpleDateFormat month_date = new SimpleDateFormat("MMM");


            c.setTime(inputFormat.parse(aDateString));

            System.out.println(day.format(date));

            datenew  = day.format(date).toString();

            date_text = c.get(Calendar.DAY_OF_MONTH);
            month = month_date.format(c.getTime());
            year = c.get(Calendar.YEAR);

            System.out.println("Year = " + c.get(Calendar.YEAR));
            System.out.println("Month = " + month);
            System.out.println("Day = " + date_text);

            System.out.println(time.format(date));

            timenew = time.format(date).toString();

        } catch (ParseException e) {

            Log.i("TAG", "DateFormat Pasring Error:" + e.getMessage());
        }

        return date;

    }

    @SuppressLint("DefaultLocale")
    @Override
    public Filter getFilter() {
        // TODO Auto-generated method stub

        Filter filter = new Filter() {

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                // TODO Auto-generated method stub


                 mOriginalvalues = (ArrayList<EventsBean>) results.values; // has the filtered values
                    if (results.count > 0) {
                        notifyDataSetChanged();
                    } else {
                        notifyDataSetInvalidated();
                    }


            }

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                // TODO Auto-generated method stub

                FilterResults results = new FilterResults();        // Holds the results of a filtering operation in values
                ArrayList<EventsBean> FilteredArrList = new ArrayList<EventsBean>();

                if (mDisplayvalues == null) {
                 mDisplayvalues = new ArrayList<EventsBean>(mOriginalvalues); // saves the original data in mOriginalValues
                 System.out.println("Display Value:" + mDisplayvalues.size());
                }

                /********
                 * 
                 *  If constraint(CharSequence that is received) is null returns the mOriginalValues(Original) values
                 *  else does the Filtering and returns FilteredArrList(Filtered)  
                 *
                 ********/
                if (constraint == null || constraint.length() == 0) {

                    // set the Original result to return  
                    results.count = mDisplayvalues.size();
                    results.values = mDisplayvalues;
                } else {
                    constraint = constraint.toString().toLowerCase();
                    for (int i = 0; i < mDisplayvalues.size(); i++) {
                        EventsBean data = mDisplayvalues.get(i);
                        System.out.println("Display Value 2:" + mDisplayvalues.size());
                        if (data.getLocation_city().toLowerCase().startsWith(constraint.toString())
                                || data.getLocation_country().toLowerCase().startsWith(constraint.toString())
                                || data.getLocation_state().toLowerCase().startsWith(constraint.toString())) 
                        {
                            FilteredArrList.add(new EventsBean(mDisplayvalues.get(i).getLocation_city(),mDisplayvalues.get(i).getLocation_country(),
                                    mDisplayvalues.get(i).getLocation_state()));
                        }
                    }
                    // set the Filtered result to return
                    results.count = FilteredArrList.size();
                    results.values = FilteredArrList;
                }
                return results;
            }

        };

        return filter;
    }


}
公共类EventListAdapter扩展BaseAdapter实现可过滤{
公共静态充气机=空;
私有ArrayList mOriginalvalues=新ArrayList();
私有ArrayList MDisplayValue;
图像加载器;
公共字符串datenew、datetime、date\u text\u值、timenew;
公共整数日期\文本,年;
公共字符串时间、月份、说明;
公共事件列表适配器(ArrayList mEventarraylist,活动){
超级();
//this.context=上下文;
this.mOriginalvalues=mEventarraylist;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
imageloader=新的imageloader(activity.getApplicationContext());
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回mOriginalvalues.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
视图持有者;
支架=充气机。充气(R.layout.activity\u list\u items,parent,false);
TextView txt_name=(TextView)holder.findViewById(R.id.textname);
TextView txt\u owner\u name=(TextView)holder.findViewById(R.id.ownername);
TextView txt_time=(TextView)holder.findViewById(R.id.date);
TextView txt_date=(TextView)holder.findViewById(R.id.txt_date_值);
TextView txt\u month=(TextView)holder.findViewById(R.id.txt\u month\u值);
TextView txt_year=(TextView)holder.findViewById(R.id.txt_year_值);
ImageView用户img=(ImageView)holder.findViewById(R.id.imageView1);
txt_name.setText(mOriginalvalues.get(position.getName());
txt_owner_name.setText(mOriginalvalues.get(position.getOwner_name());
字符串url=mOriginalvalues.get(position.getSource();
date_text_value=mOriginalvalues.get(position.getStart_time();
parseDateFromString(日期\文本\值);
txt_date.setText(String.valueOf(date_text));
txt_month.setText(月);
txt_year.setText(String.valueOf(year));
Log.i(“测试”,“日期:+日期\文本\值”);
Log.i(“TAG”,“Country:+mOriginalvalues.get(position).getCountry());
DisplayImage(url,userimg);
txt_time.setText(timenew);
//userimg.getFitsSystemWindows();
报税表持有人;
}
@SuppressLint(“SimpleDataFormat”)
公共日期parseDateFromString(String AdaTestString){
SimpleDataFormat inputFormat=新的SimpleDataFormat(“yyyy-MM-dd'T'HH:MM:ss”);
Calendar c=Calendar.getInstance();
日期=新日期();
试一试{
date=inputFormat.parse(aDateString);
系统输出打印项次(日期);
SimpleDateFormat日=新的SimpleDateFormat(“dd MMM yyyy”);
SimpleDataFormat time=新的SimpleDataFormat(“hh:mm a”,Locale.getDefault());
SimpleDateFormat月\日=新SimpleDateFormat(“MMM”);
c、 setTime(inputFormat.parse(aDateString));
System.out.println(day.format(date));
datenew=day.format(date.toString();
date_text=c.get(日历、月日);
month=month\u date.format(c.getTime());
年份=c.get(日历年);
System.out.println(“年=”+c.get(日历年));
System.out.println(“月=”+月);
System.out.println(“Day=“+date\u text”);
System.out.println(time.format(date));
timenew=time.format(date.toString();
}捕获(解析异常){
Log.i(“TAG”,“DateFormat Pasring错误:”+e.getMessage());
}
返回日期;
}
@SuppressLint(“DefaultLocale”)
@凌驾
公共过滤器getFilter(){
//TODO自动生成的方法存根
过滤器过滤器=新过滤器(){
@抑制警告(“未选中”)
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
//TODO自动生成的方法存根
mOriginalvalues=(ArrayList)results.values;//具有已筛选的值
如果(results.count>0){
notifyDataSetChanged();
}否则{
notifyDataSetionValidated();
}
}
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
//TODO自动生成的方法存根
FilterResults results=new FilterResults();//以值的形式保存筛选操作的结果
ArrayList FilteredArrList=新的ArrayList();
如果(mDisplayvalues==null){
mDisplayvalues=new ArrayList(mOriginalvalues);//将原始数据保存在mOriginalvalues中
System.out.println(“显示值:+mDisplayvalues.size());
}
/********
* 
*如果约束(接收到的CharSequence)为null,则返回mOriginalValues(原始)值
*else执行筛选并返回FilterDarrList(已筛选)
*
********/