8

に追加TextChangedListenerAutocompleteTextViewます。では、Web からデータをロードする呼び出しを呼び出します (アクティビティTextChangedListenerの開始時にすべてのデータをロードすることは、リストがかなり大きくなる可能性があるため、オプションではなく、トラフィックの無駄になります)。 はそのように見えます(私は使用します):afterTextChanged()AsyncTaskAsyncTaskonPostExecute()ArrayAdapter

    @Override
    protected void onPostExecute(ArrayList<Subregion> result)
    {
        super.onPostExecute(result);
        if (result != null)
        {
            adapter.clear();
            for (Iterator<Subregion> iterator = result.iterator(); iterator.hasNext();)
            {
                Subregion subregion = iterator.next();
                adapter.add(subregion);
            }
            adapter.notifyDataSetChanged();
            autocompleteTextView.showDropDown();
        }
    }

Subregionoverriden を持つ私のカスタムオブジェクトtoString()です。ユーザーが入力を開始したときにプログラムがデータの読み込みを開始し、結果が受信されて解析されるとすぐに結果を表示するようにします。

私の問題:

autocompleteTextView.showDropDown()効果はありません。onPostExecute()データの正しいリストを受け取り、アダプターに追加されますがshowDropDown()、ドロップダウンは表示されません。どうしたの?

4

4 に答える 4

19

私はまったく同じことをしています、そして私はちょうどこの機能を達成しました。アダプタをクリアして個別にビルドする代わりに、アダプタを次のように設定します(これはonPostExecuteで呼び出される関数で行います)。

//suggestions is a string array of suggestions.
suggestAdapter = new ArrayAdapter<String>(this, R.layout.suggestions, suggestions);
//The autocomplete view 
suggestions.setAdapter(this.suggestAdapter);
suggestAdapter.notifyDataSetChanged();

showdropdownを明示的に呼び出す必要はありません。データが変更されたことをアダプターが通知すると、オートコンプリートビューが自動的に更新されます。

また、呼び出すことができます

adapter.setNotifyOnChange(true)

これにより、電話をかける必要がなくなります

adapter.notifyDatasetChanged()

setNotifyOnChangeを参照してください。お 役に立てば幸いです。

于 2012-05-29T13:49:46.753 に答える
6

私もこの問題に直面しました。完了のしきい値は2でした。2文字を入力すると、サーバーからデータをフェッチしていて、配列アダプターに入力しましたが、autoRailwayFrom.showDropDown();ドロップダウンが表示されません...

私はオンラインで書くだけでうまくいきます...

autoRailwayFrom.setText(autoRailwayFrom.getText());
adapterFrom.notifyDataSetChanged();
autoRailwayFrom.showDropDown();
于 2013-02-23T18:28:12.360 に答える
0

Retroft api 呼び出しでこの問題に直面しました。Retrofit の onResponse メソッド内に以下のコードを保持することで解決しました。onCreate メソッド内でアダプターを初期化する必要はありません。私のコードは以下のようでした:

productListAdapter = new ArrayAdapter<>(getApplicationContext(), 
android.R.layout.simple_dropdown_item_1line, productList);

autoCompleteTextViewProductSearch.setAdapter(productListAdapter);
  productListAdapter.setNotifyOnChange(true);
  productListAdapter.notifyDataSetChanged();
  autoCompleteTextViewProductSearch.showDropDown();
于 2019-07-03T19:30:01.237 に答える