19

レイアウトにAutoCompleteTextViewがあります。AutoCompleteTextViewに存在する同じアイテムを選択する別の方法もあります。別の方法を選択した場合、次の方法でAutoCompleteTextViewに値を入力します。

autoCompleteTextView.setText(valueFromAlternativeSource);

ここでvalueFromAlternativeSource、は有効なオートコンプリートオプションの1つです。これに伴う問題は、setTextが呼び出されたときにオートコンプリートドロップダウンが表示されることです。上記の後に次の行を入れても機能しません。

autoCompleteTextView.dismissDropDown();  //Doesn't work.  Why?

ドロップダウンを閉じることが機能しない理由や、ドロップダウンを閉じることができる他の方法についてのアイデアはありますか?

4

5 に答える 5

16

これは私にとっては問題なく機能し、それほど複雑ではありません。

ListAdapter adapter = autoCompleteTextView.getAdapter();
autoCompleteTextView.setAdapter(null);
autoCompleteTextView.setText("whatever");
autoCompleteTextView.setAdapter(adapter);
于 2013-02-27T14:31:58.240 に答える
11

API <17をサポートする場合は、AutoCompleteTextviewをサブクラス化し、setText(text, filter)メソッドをオーバーライドします

@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
        }
    }
}

次に、テキストを手動で設定する場合はいつでもsetText(text, false)

于 2014-05-09T15:22:34.533 に答える
7

メッセージの処理方法の順序に問題があるようです。私の回避策は次のようになります。

//autoCompleteTextView.dismissDropDown();
new Handler().post(new Runnable() {
    public void run() {
        autoCompleteTextView.dismissDropDown();
}});
于 2012-03-26T13:26:43.493 に答える
3
autoCompleteTextView.setText(valueFromOtherMeans, filter);

     * @param filter If <code>false</code>, no filtering will be performed
     *        as a result of this call.
于 2013-03-22T12:27:10.107 に答える
2

私の解決策(しかし、私はそれが好きではありません、もっと良いものがあるはずです):

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);
   }
}
于 2012-03-16T10:35:12.380 に答える