很多时候, 在做自动下拉框时,默认点上去时需要显示一组默认的下拉数据。但是默认的AutoCompleteTextView是实现不了的, 因为setThreshold方法最小值是1,就算你设的值为0,也会自动改成1的。

  1. /**
  2. * <p>Specifies the minimum number of characters the user has to type in the
  3. * edit box before the drop down list is shown.</p>
  4. *
  5. * <p>When <code>threshold</code> is less than or equals 0, a threshold of
  6. * 1 is applied.</p>
  7. *
  8. * @param threshold the number of characters to type before the drop down
  9. *                  is shown
  10. *
  11. * @see #getThreshold()
  12. *
  13. * @attr ref android.R.styleable#AutoCompleteTextView_completionThreshold
  14. */

这时我们可以创建一个类 继承AutoCompleteTextView,覆盖enoughToFilter,让其一直返回true就行。 然后再主动调用showDropDown方法, 就能在不输入任何字符的情况下显示下拉框。

  1. package com.wole.android.pad.view;
  2. import android.content.Context;
  3. import android.graphics.Rect;
  4. import android.util.AttributeSet;
  5. import android.widget.AutoCompleteTextView;
  6. /**
  7. * Created with IntelliJ IDEA.
  8. * User: denny
  9. * Date: 12-12-4
  10. * Time: 下午2:16
  11. * To change this template use File | Settings | File Templates.
  12. */
  13. public class InstantAutoComplete extends AutoCompleteTextView {
  14. private int myThreshold;
  15. public InstantAutoComplete(Context context) {
  16. super(context);
  17. }
  18. public InstantAutoComplete(Context context, AttributeSet attrs) {
  19. super(context, attrs);
  20. }
  21. public InstantAutoComplete(Context context, AttributeSet attrs, int defStyle) {
  22. super(context, attrs, defStyle);
  23. }
  24. @Override
  25. public boolean enoughToFilter() {
  26. return true;
  27. }
  28. @Override
  29. protected void onFocusChanged(boolean focused, int direction,
  30. Rect previouslyFocusedRect) {
  31. super.onFocusChanged(focused, direction, previouslyFocusedRect);
  32. if (focused) {
  33. performFiltering(getText(), 0);
  34. showDropDown();
  35. }
  36. }
  37. public void setThreshold(int threshold) {
  38. if (threshold < 0) {
  39. threshold = 0;
  40. }
  41. myThreshold = threshold;
  42. }
  43. public int getThreshold() {
  44. return myThreshold;
  45. }
  46. }
  1. searchSuggestionAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, new ArrayList<String>(5));
  2. search_et.setAdapter(searchSuggestionAdapter);
  3. search_et.addTextChangedListener(new TextWatcher() {
  4. @Override
  5. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  6. }
  7. @Override
  8. public void onTextChanged(CharSequence s, int start, int before, int count) {
  9. }
  10. 没有输入任何东西 则显示默认列表,否则调用接口,展示下拉列表
  11. @Override
  12. public void afterTextChanged(Editable s) {
  13. if (s.length() >= 1) {
  14. if (fetchSearchSuggestionKeywordsAsyncTask != null) {
  15. fetchSearchSuggestionKeywordsAsyncTask.cancel(true);
  16. }
  17. fetchSearchSuggestionKeywordsAsyncTask =new FetchSearchSuggestionKeywordsAsyncTask();
  18. fetchSearchSuggestionKeywordsAsyncTask.execute();
  19. }else{
  20. showHotSearchKeywords();
  21. }
  22. }
  23. });
  24. search_et.setOnItemClickListener(new OnItemClickListener() {
  25. @Override
  26. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  27. String item = searchSuggestionAdapter.getItem(position);
  28. search_et.setText(item);
  29. search_btn.performClick();
  30. }
  31. });
  32. //点击autocompletetextview时,如果没有输入任何东西 则显示默认列表
  33. search_et.setOnTouchListener(new View.OnTouchListener() {
  34. @Override
  35. public boolean onTouch(View v, MotionEvent event) {
  36. if (TextUtils.isEmpty(search_et.getText().toString())) {
  37. showHotSearchKeywords();
  38. }
  39. return false;
  40. }
  41. });
  1. //这里发现很奇怪的事情, 需要每次new一个ArrayAdapter,要不然有时调用showDropDown不会有效果
  2. private void showHotSearchKeywords() {
  3. MiscUtil.prepareHotSearchKeywords(getWoleApplication());
  4. searchSuggestionAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, getWoleApplication().hotSearchHistoryKeywords);
  5. search_et.setAdapter(searchSuggestionAdapter);
  6. searchSuggestionAdapter.notifyDataSetChanged();
  7. search_et.showDropDown();
  8. }
  9. private class FetchSearchSuggestionKeywordsAsyncTask extends AsyncTask<Void, Void, List<String>> {
  10. @Override
  11. protected List<String> doInBackground(Void... params) {
  12. List<String> rt = new ArrayList<String>(5);
  13. String keyword = search_et.getText().toString();
  14. if (!TextUtils.isEmpty(keyword)) {
  15. try {
  16. String result = NetworkUtil.doGet(BaseActivity.this, String.format(Global.API_SEARCH_SUGGESTIOIN_KEYWORDS, URLEncoder.encode(keyword, "utf-8")), false);
  17. Log.i("FetchSearchSuggestionKeywordsAsyncTask", result);
  18. if (!TextUtils.isEmpty(result)) {
  19. JSONArray array = new JSONArray(result);
  20. for (int i = 0; i < array.length(); i++) {
  21. JSONObject jsonObject = array.getJSONObject(i);
  22. rt.add(jsonObject.optString("keyword"));
  23. }
  24. }
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. return rt;
  30. }
  31. @Override
  32. protected void onPostExecute(List<String> strings) {
  33. super.onPostExecute(strings);
  34. if (!strings.isEmpty()) {
  35. //这里发现很奇怪的事情, 需要每次new一个ArrayAdapter,要不然有时调用showDropDown不会有效果
  36. searchSuggestionAdapter = new ArrayAdapter<String>(BaseActivity.this, android.R.layout.simple_dropdown_item_1line, strings);
  37. search_et.setAdapter(searchSuggestionAdapter);
  38. searchSuggestionAdapter.notifyDataSetChanged();
  39. }
  40. }
  41. }

ref:http://stackoverflow.com/questions/2126717/android-autocompletetextview-show-suggestions-when-no-text-entered

扩展AutoCompleteTextView让其默认显示一组列表。setThreshold的更多相关文章

  1. DEDECMS点击主栏目默认显示第一个子栏目列表的方法

    本文实例讲述了DEDECMS点击主栏目默认显示第一个子栏目列表的方法.分享给大家供大家参考.具体分析如下: 今天公司有个需求是,点击导航上的父栏目进去默认显示第一个子栏目的列表,以下是具体实现方法,可 ...

  2. 请问:关于织梦dedecms点击导航上的父栏目进去默认显示第一个子栏目的列表的问题

    要设置织梦dedecms点击导航上的父栏目进去默认显示第一个子栏目的列表, 就按照如下图所示的方法进行操作,为什么 点击导航上的父栏目出现死循环呢, 根本浏览不了网页. 请各位大神指点指点,为什么点击 ...

  3. vue实现两重列表集合,点击显示,点击隐藏的折叠效果,(默认显示集合最新一条数据,点击展开,显示集合所有数据)

    效果图: 默认显示最新一条数据: 点击显示所有数据: 代码: 说明:这里主要是 这块用来控制显示或者隐藏 根据当前点击的  这个方法里传递的index 对应  isShow 数组里的index  ,对 ...

  4. Laravel大型项目系列教程(四)显示文章列表和用户修改文章

    小编心语:不知不觉已经第四部分了,非常感谢很多人给小编提的意见,改了很多bug,希望以后能继续帮小编找找茬~小编也不希望误导大家~这一节,主要讲的 是如何显示文章列表和让用户修改文章,小编预告一下(一 ...

  5. centos中设置apache显示目录列表

    apache中显示目录列表 在http.conf中加入如下代码(如有虚拟主机配置,加在虚拟主机配置段内),并把主目录内的index.pho,index.html,index.htm文件删除 复制代码  ...

  6. Android学习笔记:ListView简单应用--显示文字列表

    在activity中的编写如下代码: final List<String> items = new ArrayList<String>(); //设置要显示的数据,这里因为是例 ...

  7. ionic 下拉选择框中默认显示传入的参数

    开发过程当中遇到一个有趣的问题,如果我在第一个页面需要把 item { "ownerId" : 1 } 传递给第二个页面,并挂在$scope下 $scope.item = $sta ...

  8. /.nav-tabs :是普通标签页 .nav-pills:胶囊式标签页 action ;默认的激活项,给<li>加默认显示的是哪个标签页内容 .nav是标签页的一个基类,给ul加 .nav-stacked: 垂直排列BootStrap

    <meta name="viewport" content="with=device-width, initial-scale=1, user-scalabe=no ...

  9. Django - 权限(4)- queryset、二级菜单的默认显示、动态显示按钮权限

    一.queryset Queryset是django中构建的一种数据结构,ORM查询集往往是queryset数据类型,我们来进一步了解一下queryset的特点. 1.可切片 使用Python 的切片 ...

随机推荐

  1. Python模块 shelve xml configparser hashlib

    常用模块1. shelve 一个字典对象模块 自动序列化2.xml 是一个文件格式 写配置文件或数据交换 <a name="hades">123</a>3. ...

  2. 零基础入门学习Python(27)--集合:在我的世界里,你就是唯一

    知识点 集合:set set和dict类似,也是一组key的集合,但不存储value.由于key不能重复,所以,在set中,没有重复的key. 集合中的元素的三个特征: 1)确定性(元素必须可hash ...

  3. memcached协议解析 及使用

    本文转载自:http://www.ccvita.com/306.html 协议memcached 的客户端使用TCP链接与服务器通讯.(UDP接口也同样有效,参考后文的 “UDP协议” )一个运行中的 ...

  4. python字符串,常用编码

    Python的字符串和编码 1.常用编码 与python有关的编码主要有:ASCII.Unicode.UTF-8 其中ASCII如今可以视作UTF-8的子集 内存中统一使用Unicode编码(如记事本 ...

  5. typeof instanceof操作符的相关知识

    数据类型 ECMAScript中有5中基本数据类型:Undefined Null Boolean Number String. Typeof运算符 对一个值使用typeof操作符可能返回下列某个字符串 ...

  6. 关于No Spring WebApplicationInitializer types detected on classpath的提示,tomcat 卡主

    No Spring WebApplicationInitializer types detected on classpath 下一句:Initializing Spring root WebAppl ...

  7. 数据库SQL实战练习

    http://blog.csdn.net/iamyvette/article/details/77151925

  8. [luoguP3572] [POI2014]PTA-Little Bird(DP + 单调队列)

    传送门 DP方程 f[i] = f[j] + (a[j] <= a[i]) ( i - k < j < i ) 要使 f[i] 最小,需要等号后面的值最小,可以用单调队列来维护. 至 ...

  9. [NOIP2006] 提高组 洛谷P1064 金明的预算方案

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...

  10. POJ2367 拓扑排序 裸题 板子题

    http://poj.org/problem?id=2367 队列版 #include <stdio.h> #include <math.h> #include <str ...