当前位置: 首页 > 面试题库 >

AutoCompleteTextView强制显示所有项目

宋鸿德
2023-03-14
问题内容

在我的应用中有一段时间,无论用户输入了什么内容,我都必须强制显示建议列表中的所有项目。我怎样才能做到这一点?

我尝试使用过滤进行某些操作,但是对我而言,作为初学者进行过滤实在太复杂了,我尝试在没有任何运气的情况下搜索初学者教程进行过滤。也许,有一种更简单的方法可以强制显示所有建议项?

编辑:基本上我的想法是,当用户键入列表中未包含的内容时,它将显示他可以拥有的所有可用选项。

我已经找到检查ACTV是否正常显示天气的最佳方法,但是onTextChangeEvent我将用户键入的文本与列表进行比较,然后如果未找到任何元素,则显示完整列表。

public void onTextChanged(CharSequence s, int start, int before, int count)
         {                
           final EditText editText = (EditText) findViewById(R.id.vardsUserInput);
            String strValue = editText.getText().toString().toUpperCase();
            String temp;
            int Cc=0; //my count variable
            for(int i=0; i<vardi.length; i++)
            {
                temp = vardi[i].toUpperCase();
                if(temp.startsWith(strValue.toUpperCase()))
                {
                    Log.d("testing",vardi[i]);
                    Cc++;                                                   
                }
            }               
        if(Cc == 0)
        {
        //Show all the available options
    textView.showDropDown();                    
         }                  
}

问题答案:

基本上,经过5-6个小时的实验以了解该死的过滤器的工作原理后,我编写了自己的适配器,该适配器完全可以实现我想要的功能:

    public class burtuAdapteris extends ArrayAdapter<String> implements Filterable {

       ArrayList<String> _items = new ArrayList<String>();
       ArrayList<String> orig = new ArrayList<String>();

       public burtuAdapteris(Context context, int resource, ArrayList<String> items) {
           super(context, resource, items);

           for (int i = 0; i < items.size(); i++) {
                orig.add(items.get(i));
            }
       }

       @Override
       public int getCount() {
           if (_items != null)
               return _items.size();
           else
               return 0;
       }

       @Override
       public String getItem(int arg0) {
           return _items.get(arg0);
       }


      @Override

      public Filter getFilter() {
          Filter filter = new Filter() {
              @Override
              protected FilterResults performFiltering(CharSequence constraint) {

                  if(constraint != null)
                      Log.d("Constraints", constraint.toString());
                  FilterResults oReturn = new FilterResults();

                /*  if (orig == null){
                    for (int i = 0; i < items.size(); i++) {
                        orig.add(items.get(i));
                    }
                  }*/
                  String temp;  
                  int counters = 0;
                  if (constraint != null){

                      _items.clear();
                      if (orig != null && orig.size() > 0) {
                          for(int i=0; i<orig.size(); i++)
                            {                           
                                temp = orig.get(i).toUpperCase();

                                if(temp.startsWith(constraint.toString().toUpperCase()))
                                {

                                     _items.add(orig.get(i));               
counters++;

                                }
                            }
                      }
                      Log.d("REsult size:" , String.valueOf(_items.size()));
                          if(!counters)
                          {
                             _items.clear();
                             _items = orig;
                          }
                      oReturn.values = _items;
                      oReturn.count = _items.size();
                  }
                  return oReturn;
              }


              @SuppressWarnings("unchecked")
              @Override
              protected void publishResults(CharSequence constraint, FilterResults results) {
                  if(results != null && results.count > 0) {
                        notifyDataSetChanged();
                        }
                        else {
                            notifyDataSetInvalidated();
                        }

              }

            };

          return filter;

      }


 }

而且使用简单,只需将原始适配器替换为此:

final burtuAdapteris fAdapter = new burtuAdapteris(this, android.R.layout.simple_dropdown_item_1line, liste);

就我而言,liste是: ArrayList<String> liste = new ArrayList<String>();



 类似资料:
  • 我有一个AutocompleteTextView,它工作得很好。当我写入一个word时,它会显示相关的结果,但我想在AutoCompleteTextView中显示所有项,而不写入任何word。我怎么能那么做。

  • < code > autocomplete textview 出现了一个奇怪的问题。 我有一个,在键入时显示城市建议。城市列表通过 从远程服务器检索。当我使用软键盘或软键盘上的按钮时,建议工作正常。确实显示建议的城市。 但是,当我尝试使用设置文本时,我有一个问题。.我也尝试过但仍然没有运气。 适配器就在那里,只是建议没有显示出来。 有什么建议吗? 谢了。

  • 如何强制显示所有以使用。如通过。有没有办法这样做?? 更新 这里我希望所有Jquery Datepicker都按照特定的时区而不是客户机打开日期和时间。

  • 产品:Sybase ASE 11/12/15/16 我希望更新由不同的应用程序调用的存储过程,所以更改应用程序不是一个选项。需要什么最好用例子来解释: 目前的结果: 我需要的是清除第一列的重复数据。例如,上述数据应如下所示: 我知道我可以做光标,但大约有10000条记录,这似乎并不熟练。查找select命令时,不希望更改数据库中的数据。

  • 我正在做一个需要安全连接的项目。 我可以设置的路线,uri,资产使用'https'通过: 但一直设置参数似乎很累。 有没有办法强制所有路由生成HTTPS链接?

  • 英文原文:http://emberjs.com/guides/getting-started/show-all-todos-again/ 接下来我们将对应用进行进一步的修改,使得用户可以查看所有待办事项。 在index.html中,将‘全部’待办事项的<a>标签改为Handlebars的{{link-to}}助手: 1 2 3 4 5 6 7 8 9 10 11 {{! ... 为保持代码简洁,