How can I avoid autocomplete dropdown appearing when text is programmatically set?

后端 未结 5 1748
说谎
说谎 2021-02-07 04:16

I have an AutoCompleteTextView in my layout. I also have an alternative way to select the same items which are present in the AutoCompleteTextView. When the alternative way is

相关标签:
5条回答
  • 2021-02-07 04:49

    This works fine for me and is less complex:

    ListAdapter adapter = autoCompleteTextView.getAdapter();
    autoCompleteTextView.setAdapter(null);
    autoCompleteTextView.setText("whatever");
    autoCompleteTextView.setAdapter(adapter);
    
    0 讨论(0)
  • 2021-02-07 04:52

    If you want to support API<17, Subclass AutoCompleteTextview and override setText(text, filter) method

    @Override
    public void setText(CharSequence text, boolean filter) {
        if(Build.VERSION.SDK_INT>=17) {
            super.setText(text, filter);
        }else{
            if(filter){
                setText(text);
            }else{
                ListAdapter adapter = getAdapter();
                setAdapter(null);
                setText(text);
                if(adapter instanceof ArrayAdapter)
                    setAdapter((ArrayAdapter) adapter);
                else
                    setAdapter((CursorAdapter) adapter);
                //if you use more types of Adapter you can list them here
            }
        }
    }
    

    Then whenever you want to set the text manually call setText(text, false)

    0 讨论(0)
  • 2021-02-07 04:56

    My solution (but I don't like it, there must be something better):

    autoCompleteTextView.setText(valueFromAlternativeSource);
    autoCompleteTextView.setDropDownHeight(0);
    
    autoCompleteTextView.setOnKeyListener(new OnKeyListener(){
    
       @Override
       public boolean onKey(View v, int keyCode, KeyEvent event) {
           autoCompleteTextView.setDropDownHeight(LayoutParams.WRAP_CONTENT);
       }
    }
    
    0 讨论(0)
  • 2021-02-07 04:58
    autoCompleteTextView.setText(valueFromOtherMeans, filter);
    
         * @param filter If <code>false</code>, no filtering will be performed
         *        as a result of this call.
    
    0 讨论(0)
  • 2021-02-07 05:02

    Looks like its a problem of the order how messages are processed. My work around looks like this:

    //autoCompleteTextView.dismissDropDown();
    new Handler().post(new Runnable() {
        public void run() {
            autoCompleteTextView.dismissDropDown();
    }});
    
    0 讨论(0)
提交回复
热议问题