Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting current suggestion from `AutoCompleteTextView`

How do you get the current top suggestion in an AutoCompleteTextView? I have it suggesting items, and I have a text change listener registered. I also have a list on the same screen. As they type, I want to scroll the list to the current "best" suggestion. But I can't figure out how to access the current suggestions, or at least the top suggestion. I guess I'm looking for something like 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
        }
    });
like image 829
Ron Romero Avatar asked Oct 17 '10 16:10

Ron Romero


People also ask

How do I get text from AutoCompleteTextView?

OnItemClickListener and set onItemClickListener() on the AutoCompleteTextView to get the user selected item value from the list. Notice that while using the ArrayAdapter , we have provided a layout object as argument android. R.

What is threshold value for AutoCompleteTextView?

The Threshold limit is used to define the minimum number of characters the user must type to see the dropdown list of suggestions. In android, we can create an AutoCompleteTextView control in two ways either manually in an XML file or create it in the Activity file programmatically.

What does Android completion hint attribute in AutoCompleteTextView?

This defines the hint view displayed in the drop down menu. This defines the number of characters that the user must type before completion suggestions are displayed in a drop down menu. This is the View to anchor the auto-complete dropdown to.

How do I set autocomplete text on Android?

If you want to get suggestions , when you type in an editable text field , you can do this via AutoCompleteTextView. It provides suggestions automatically when the user is typing. The list of suggestions is displayed in a drop down menu from which the user can choose an item to replace the content of the edit box with.


2 Answers

I've done what you want to do with the following code:

@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 will print the text that is displayed on the first item.

Note that this will happen even if you aren't showing the pop-up (suggestions) yet. Also, you should check if there are any items that passed the filter criteria (aka the user's input).

To solve the first problem:

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

To solve the second problem, use getCount > 0

like image 152
Pedro Loureiro Avatar answered Sep 18 '22 20:09

Pedro Loureiro


AutoCompleteTextView does not scroll down to the best selection, but narrows down the selection as you type. Here is an example of it: http://developer.android.com/resources/tutorials/views/hello-autocomplete.html

As I see it from AutoCompleteTextView there is no way to get current list of suggestions.

The only way seem to be writing custom version of ArrayAdapter and pass it to AutoCompleteTextView.setAdapter(..). Here is the source to ArrayAdapter. You must only change a method in inner class ArrayFilter.performFiltering() so that it exposes FilterResults:

.. add field to inner class ArrayFilter:

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

.. before end of method performFiltering:

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

Using it like this (adapted example from link):

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;
like image 38
Peter Knego Avatar answered Sep 16 '22 20:09

Peter Knego