很多时候, 在做自动下拉框时,默认点上去时需要显示一组默认的下拉数据。但是默认的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. 两种js下载文件的方法(转)

    function DownURL(strRemoteURL, strLocalURL){ try{ var xmlHTTP = new ActiveXObject("Microsoft.XM ...

  2. Excel OLE控制

    来源:http://blog.csdn.net/chelen_jak/article/details/7069095 Delphi  控制Excel(一) 使用动态创建的方法 首先创建 Excel 对 ...

  3. linux ping-测试主机之间网络的连通性

    博主推荐:更多网络测试相关命令关注 网络测试  收藏linux命令大全 ping命令用来测试主机之间网络的连通性.执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问 ...

  4. Notepad++ 连接远程 FTP 进行文件编辑

    一.下载安装 Notepad++ 1.下载 Notepad++ : https://pan.baidu.com/s/1o7VrS4y 密码 : ck8a 2.安装 Notepad++ 2.1.勾选所有 ...

  5. 开启POP3/SMTP服务

    实现发送邮件时需要先启用POP3/SMTP服务(以qq邮箱和网易邮箱启用为例) 一 qq邮箱启用 二.网易邮箱开启POP3/SMTP服务 至此:服务已开启

  6. BNUOJ 5363 Machine Schedule

    Machine Schedule Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Origin ...

  7. [HDU2136] Largest prime factor(素数筛)

    传送门 题意 给出若干个数n(n<=1000000),求每个n的最大质因子的排名. 质数的排名:如果素数p是第k小的素数,那么p的排名就是k. 思路 乍一看不知道怎么搞. 其实可以想想我们怎么筛 ...

  8. python用模块zlib压缩与解压字符串和文件的方法

    摘自:http://www.jb51.net/article/100218.htm Python标准模块中,有多个模块用于数据的压缩与解压缩,如zipfile,gzip, bz2等等. python中 ...

  9. Thinkphp5.0 的Db操作

    Thinkphp5.0 的Db操作 连接操作: <?php namespace app\index\controller; use think\Controller; use think\Db; ...

  10. hadoop(2)hadoop配置

    hadoop入门(二) hadoop的配置 1.本地模式 2.伪分布式 3.分布式     一.配置linux环境: 1打开虚拟网络编辑器,选择 VMnet1 仅主机模式, 子网 IP 设为 192. ...