很多时候, 在做自动下拉框时,默认点上去时需要显示一组默认的下拉数据。但是默认的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. [Python3网络爬虫开发实战] 3.1.3-解析链接

    前面说过,urllib库里还提供了parse这个模块,它定义了处理URL的标准接口,例如实现URL各部分的抽取.合并以及链接转换.它支持如下协议的URL处理:file.ftp.gopher.hdl.h ...

  2. sed输出指定行

    and line ,8p to line ,8p -e 20p - and line -n:取消默认输出.注意:sed命令会默认把输入行打印到屏幕上,所以如果想精准的控制输出,就需要-n. -e:进行 ...

  3. Jmeter关联,正则表达式提取器使用2

    正则表达式的用处很多,最基础的用法 1,断言 2,传参(关联) 例子 1.http请求 2正则表达式提取,想要提取列表列中id,一遍打开列表页 如果是1,每次就会取相同的值!匹配数字的权限高于模板$0 ...

  4. 《C语言程序设计(第四版)》阅读心得(一)

    本篇开始写我个人觉得谭浩强老师的<C语言程序设计(第四版)>中之前没有认识到,或者忘了的知识.因为本科学过,所以有些简单的东西就没有放进来了,所以可能并不是太全面. 第一章程序设计与语言 ...

  5. HDU 1800 hash 找出现最多次数的字符串的次数

    乘法hash: 这类hash函数利用了乘法的不相关性 int Hash(char *str){    int seed = 131 , value=0;    while(*str != '\0'){ ...

  6. HDU 2897 经典巴什博弈

    从n个石子中每次取p~q个,求先手能否获胜 可以先列举一部分数据,然后观察可得总是在p+q中循环,所以只要用n对p+q取模就好了 #include <cstdio> #include &l ...

  7. [luoguP1944] 最长括号匹配_NOI导刊2009提高(1)

    传送门 非常傻的DP. f[i]表示末尾是i的最长的字串 #include <cstdio> #include <cstring> #define N 1000001 int ...

  8. [luoguP1896] [SCOI2005]互不侵犯King(状压DP)

    传送门 先预处理出来一行中放置国王的所有情况和每种情况所用的国王个数. f[i][j][k]表示前i行放j个国王且最后一行的状态为k的方案数 状压DP即可 #include <cstdio> ...

  9. poj 1752 Advertisement (差分约束)

    题目大意:题目大意:有n个人在一条路上跑步,广告商准备在这条路上设置广告牌,假设这条路上每一个点有一个广告牌 现在已知这n个人从Ai开始跑,到Bi结束,那么他可以看到max(Ai,Bi)-min(Ai ...

  10. Warm up-HUD4612(树的直径+Tarjin缩点)

    http://acm.hdu.edu.cn/showproblem.php?pid=4612 题目大意:求加一条边最小的桥数 先用Tarjin缩点求出一棵树,然后用bfs求出树的直径,树的直径就是加一 ...