从“AutoCompleteTextView”获取当前建议

时间:2010-10-17 16:57:43

标签: android autocomplete

如何在AutoCompleteTextView中获得当前的最高建议?我有它建议项目,我有一个文本更改监听器注册。我在同一个屏幕上也有一个列表。在键入时,我想将列表滚动到当前的“最佳”建议。但我无法弄清楚如何访问当前的建议,或至少是最重要的建议。我想我正在寻找像AutoCompleteTextView.getCurrentSuggestions()

这样的东西
autoCompleteTextView.addTextChangedListener(new TextWatcher() {
    public void onTextChanged(CharSequence s, int start, int before, int count) {
            String currentText = autoCompleteTextView.getText();
            String bestGuess = autoCompleteTextView.getCurrentSuggestions()[0];
            //                                      ^^^ mewthod doesn't exist
            doSomethingWithGuess(bestGuess);
        }
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // do nothing
        }
        public void afterTextChanged(Editable s) {
            // do nothing
        }
    });

2 个答案:

答案 0 :(得分:16)

我已经使用以下代码完成了您想要做的事情:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.autocomplete_1);

    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_dropdown_item_1line, COUNTRIES);
    AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.edit);
    textView.setAdapter(adapter);

    adapter.registerDataSetObserver(new DataSetObserver() {
        @Override
        public void onChanged() {
            super.onChanged();
            Log.d(TAG, "dataset changed");
            Object item = adapter.getItem(0);

            Log.d(TAG, "item.toString "+ item.toString());
        }
    });
}

item.toString将打印第一个项目上显示的文本。

请注意,即使您尚未显示弹出窗口(建议),也会发生这种情况。此外,您应该检查是否有任何项目通过了过滤条件(也就是用户的输入)。

解决第一个问题:

    int dropDownAnchor = textView.getDropDownAnchor();
    if(dropDownAnchor==0) {
        Log.d(TAG, "drop down id = 0"); // popup is not displayed
        return;
    }
    //do stuff

要解决第二个问题,请使用getCount&gt; 0

答案 1 :(得分:1)

AutoCompleteTextView不会向下滚动到最佳选择,但会在您键入时缩小选择范围。以下是它的示例:http://developer.android.com/resources/tutorials/views/hello-autocomplete.html

正如我从AutoCompleteTextView看到的那样,无法获得当前的建议列表。

唯一的方法似乎是编写ArrayAdapter的自定义版本并将其传递给AutoCompleteTextView.setAdapter(..)。这是source to ArrayAdapter。您只能更改内部类ArrayFilter.performFiltering()中的方法,以便它公开FilterResults:

..将字段添加到内部类ArrayFilter:

public ArrayList<T> lastResults;  //add this line

..方法结束前执行过滤:

  lastResults = (ArrayList<T>) results; // add this line
  return results;
}

像这样使用它(改编自链接的例子):

AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
CustomArrayAdapter<String> adapter = new CustomArrayAdapter<String>(this, R.layout.list_item, COUNTRIES);
textView.setAdapter(adapter);

// read suggestions
ArrayList<String> suggestions = adapter.getFilter().lastResult;