android中的动态自动完成小部件

时间:2010-10-26 18:05:48

标签: android

任何人都可以指导我如何在android中实现动态自动完成小部件。我的要求是,当我键入一个字母时,一个线程将起作用,并将返回一个最多有5个建议的数组。我需要在自动完成列表视图中显示这5条建议。

专家请指导如何实施相同的。

展望未来, 问候, 罗尼

1 个答案:

答案 0 :(得分:5)

你看过AutoCompleteTextView吗?

显示您想要的内容。现在您只需要一个实现Filterable的适配器来生成五个集合。 Filterable表示实体将能够创建Filter对象。过滤器对象使用线程池,并在单独的工作线程上调度过滤,并绑定到UI线程上的视图。

所以我们说我们有

public class TextAdapter extends BaseAdapter implements Filterable {
   List<String> myList;
   Filter myFilter;
   TextAdapter(String[] strings) {
      myList = Arrays.asList(strings);
      myFilter = new MyFilter(myList);
   }

   ...
   // implement the BaseAdapter methods as needed to manage the list.
   //

   public void setContents(List<String> strs) {
     myList.clear();
     myList.addAll(strs);
     mFilter = new Filter(myList);
   }

   public Filter getFilter() {
     return myFilter;
   }

   private final class MyFilter implements Filter {
       final List<String> mOriginalList;
       public MyFilter(List<String> list) {
          mOriginalList = new ArrayList<String>(list);
       }

       public Filter.FilterResults performFiltering(CharSequence constraint) {
               // Search through your original list 
               Filter.FilterResults results = new Filter.FilterResults();
               List<String> strs = new ArrayList<String>();
               if (TextUtils.isEmpty(constraint)) {
                   strs.addAll(myOriginalList);
               }
               for (String str : myOriginalList) {
                  if (matches(str, constraint)) {
                   strs.add(str);
                  }
               }
               if (results.size > 5) {
                  // prune the list to your own tastes

               }
               results.count = strs.size();
               results.value = strs;
       }

       public void publishResults(CharSequence constraint, Filter.FilterResults results)
            setContents((List<String>)results.value);
            notifyDatasetChanged();
       }

       public boolean matches(String str, CharSequence value) {
          /// implement this part
           }

        }
    }