20

アプリにオートコンプリートを追加するためにAutoCompleteTextViewAndroidを使用しています。CursorAdapterビューでonItemClickListener()(つまり、ユーザーがオートコンプリートされたドロップダウン項目の 1 つに触れたとき)、テキストを取得して EditText に配置し、ユーザーが必要に応じて変更できるようにします。

ただし、setText()TextView を呼び出すと、オートコンプリート動作がトリガーされ、ドロップダウンが再び表示されます。ユーザーがキーボードで新しいテキストを入力した場合にのみ、ドロップダウンを表示したいと思います。これを行う方法はありますか?

4

5 に答える 5

21

dismissDropDown()AutoCompleteTextViewオブジェクトのメソッドを使用できます。ドキュメントを見てください。

于 2011-11-08T15:08:01.140 に答える
8

で提案されたアイテムをクリックすると、そのAutoCompleteTextView.onTextChanged()前に実行されるonItemClick ため、これを回避するには、以下のコードを試してください..

autocompletetextview.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        if (autocompletetextview.isPerformingCompletion()) {
            // An item has been selected from the list. Ignore.
        } else {
            // Perform your task here... Like calling web service, Reading data from SQLite database, etc...
        }
    }

    @Override
    public void afterTextChanged(final Editable editable) {

    }
});
于 2018-08-17T05:55:49.767 に答える
6

AutoCompleteTextView のドロップダウンを無効にしたい場合は、その post(Runnable r) メソッドを使用する必要があります。わたしにはできる :)

以下に例を示します。

mAutoCompleteTextView.post(new Runnable() {
    public void run() {
        mAutoCompleteTextView.dismissDropDown();
    }
}
于 2012-10-15T07:49:58.277 に答える
4

これを数時間ハッキングした後、私自身の質問に答えます。独自の実装をOnItemClickListener行い、代わりに既存のクリック リスナーに依存して TextView を設定する必要があることがわかりました。Cursor.toString() の結果を使用してテキストビューを設定していたため、最初は onItemClickListener を実装していました。出力文字列を変更するconvertToString(Cursor)には、CursorAdapter に実装する必要があります。返される CharSequence は、テキスト ビューに入力されます。

これを行うと、ドロップダウンが再び表示されなくなります (setText() は完了動作をトリガーしますが、デフォルトの onItemClickListener はトリガーしないため)。

于 2011-11-08T15:37:46.537 に答える