【问题标题】:Autocomplete text view and custom adapter getting the selected item自动完成文本视图和自定义适配器获取所选项目
【发布时间】:2014-09-29 04:52:03
【问题描述】:

我对@9​​87654321@ 和支持它的自定义适配器有疑问。由于我使用的是自定义适配器,一个扩展 ArrayAdapter<Locality> 的类(其中 Locality 是一个普通模型类),当用户键入一些文本但没有从下拉列表中单击该项目时,是否可以获得 Selected Item。

例如,假设我使用的是setOnItemClickListener (AdapterView.OnItemClickListener l)。我可以得到哪个项目被点击并因此被选中。这看起来很简单,但是如果用户键入完整的文本而不单击建议下拉列表中的任何项目,会发生什么情况。 onItemClick 永远不会触发,并且即使用户输入的文本是有效的项目文本(在我的例子中为 Locality Name),也不会有任何选定的项目。

一种选择是检查输入的文本,并使用该文本从服务器调用中找到匹配的位置。但这肯定看起来很粗糙,所以我希望能得到一些建议。

【问题讨论】:

    标签: android autocomplete autocompletetextview


    【解决方案1】:

    你可以像这样在你的 autocompletetextview 上设置 addTextChangeListener

     myAutoComplete.addTextChangedListener(new TextWatcher() {
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                readSearchTerm(s.getText().toString());
            }
        });
    
    
    
     private List<String> readSearchTerm(String userInput) {
        // TODO Auto-generated method stub
        List<String> searchItemList = new ArrayList<String>();
    
        try {
            for (int i = 0; i < myObjectList.size(); i++) {
    
                myObjectList.get(i).objectName = myObjectList.get(i).objectName
                        .replace(" ", "-");
    
                String itemArray[] = myObjectList.get(i).objectName.split("-");
    
                for (int j = 0; j < itemArray.length; j++) {
    
                    Log.i("mini", "Item:" + itemArray[j]);
                    if (itemArray[j].contains(userInput)) {
                        searchItemList.add(myObjectList.get(i).objectName);
                        break;
                    }
                }
    
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
        return searchItemList;
    
    }
    

    只需根据您的代码更改读取搜索词的方法。您将获得过滤后的列表或匹配该项目的项目

    【讨论】:

    • 我已经有了那个清单。当用户键入一个字符时,我从服务器获取匹配项并将其显示为下拉列表。所以在任何时候我已经有了一个与当前输入的文本匹配的项目列表。只是如果用户没有通过单击从列表中选择任何项目,则所选项目在我的代码中不可用。虽然我可以从输入的文本中构造它,但我正在寻找一种更简洁的方法
    猜你喜欢
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    相关资源
    最近更新 更多