从"AutoCompleteTextView"获取当前建议

Ron*_*ero 7 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
        }
    });
Run Code Online (Sandbox Code Playgroud)

Ped*_*iro 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());
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

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

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

解决第一个问题:

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

要解决第二个问题,请使用getCount> 0