design_by_chen 2015-04-10 02:25
浏览 635

为什么 autocompletetextview

为什么 autocompletetextview 用了直接写的 adapter showdropdown 没有效果了啊
下面是我写的adapter

package com.depart.adapter;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;

import com.depart.autocomplete.R;
import com.depart.db.HistorySQLiteOpenHelper;

public class AutoCompleteAdapter extends BaseAdapter implements Filterable{

    private Context context;
    private ArrayFilter mFilter;
    private ArrayList<String> mOriginalValues;//所有的Item
    private List<String> mObjects;//过滤后的item
    private final Object mLock = new Object();
    private int maxMatch=10;//最多显示多少个选项,负数表示全部
    public AutoCompleteAdapter(Context context,ArrayList<String> mOriginalValues,int maxMatch){
        this.context=context;
        this.mOriginalValues=mOriginalValues;
        this.maxMatch=maxMatch;
    }
    public AutoCompleteAdapter(){

    }

    @Override
    public Filter getFilter() {
        // TODO Auto-generated method stub
        if (mFilter == null) {  
            mFilter = new ArrayFilter();  
        }  
        return mFilter;
    }

    public void refresh(){

        notifyDataSetChanged();
    }
    private class ArrayFilter extends Filter {

        @Override
        protected FilterResults performFiltering(CharSequence prefix) {
            // TODO Auto-generated method stub
            FilterResults results = new FilterResults();  

//          if (mOriginalValues == null) {  
//                synchronized (mLock) {  
//                    mOriginalValues = new ArrayList<String>(mObjects);//  
//                }  
//            }
            System.out.println("prefix:"+prefix);
            if (prefix == null || prefix.length() == 0) {  
                synchronized (mLock) {
                    Log.i("tag", "mOriginalValues.size="+mOriginalValues.size());
                    ArrayList<String> list = new ArrayList<String>(mOriginalValues);  
                    results.values = list;  
                    results.count = list.size(); 
                    return results;
                }  
            } else {
                String prefixString = prefix.toString().toLowerCase();  
                if(prefixString==null){
                    prefixString="1";
                }
                final int count = mOriginalValues.size();  

                final ArrayList<String> newValues = new ArrayList<String>(count);  

                for (int i = 0; i < count; i++) {
                    final String value = mOriginalValues.get(i);  
                    final String valueText = value.toLowerCase();  

                    if(valueText.contains(prefixString)){//匹配所有
                         newValues.add(value);  
                    }
                    // First match against the whole, non-splitted value  
                  /*  if (valueText.startsWith(prefixString)) {  //源码 ,匹配开头
                        newValues.add(value);  
                    } */
//                    else {  
//                        final String[] words = valueText.split(" ");//分隔符匹配,效率低
//                        final int wordCount = words.length;  
//  
//                        for (int k = 0; k < wordCount; k++) {  
//                            if (words[k].startsWith(prefixString)) {  
//                                newValues.add(value);  
//                                break;  
//                            }  
//                        }  
//                    }
                    if(maxMatch>0){//有数量限制  
                        if(newValues.size()>maxMatch-1){//不要太多  
                            break;  
                        }  
                    }  
                }  

                results.values = newValues;  
                results.count = newValues.size();  
            }  

            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint,
                FilterResults results) {
            // TODO Auto-generated method stub
            mObjects = (List<String>) results.values;  
            if (results.count > 0) {  
                notifyDataSetChanged();  
            } else {  
                notifyDataSetInvalidated();  
            }
        }

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        if(mObjects!=null){
            return mObjects.size();
        }
        return 0;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        //此方法有误,尽量不要使用
        return mObjects.get(position);
    }

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

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder = null;
        if(convertView==null){
            holder=new ViewHolder();
            LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView=inflater.inflate(R.layout.simple_list_item_for_autocomplete, null);
            holder.tv=(TextView)convertView.findViewById(R.id.simple_item_0);  
            holder.iv=(ImageView)convertView.findViewById(R.id.simple_item_1);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }

        holder.tv.setText(mObjects.get(position));
        holder.iv.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String obj=mObjects.remove(position);
                mOriginalValues.remove(obj);

            /*  Cursor c = new HistorySQLiteOpenHelper(context).getWritableDatabase().
                query("history", new String []{"_id","name"}, "name = ? ", new String[]{obj}, null, null, null, null);*/        
                new HistorySQLiteOpenHelper(context).getWritableDatabase().
                delete("history", "name = ? ", new String[]{obj});

                notifyDataSetChanged();
            }


        });
        return convertView;
    }
    public void showd(){

    }
    class ViewHolder {
        TextView tv;
        ImageView iv;
    }

    public ArrayList<String> getAllItems(){
        return mOriginalValues;
    }
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 素材场景中光线烘焙后灯光失效
    • ¥15 请教一下各位,为什么我这个没有实现模拟点击
    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 保护模式-系统加载-段寄存器