オートコンプリートテキストビュー + JSONサーバーに動的にタグを取得する

StackOverflow https://stackoverflow.com/questions/6815286

質問

Androidアプリケーションを開発しています。レイアウトにautocompleteTextViewがあります。このテキストビューにサーバーからの提案を入力したいと思います。サーバーには約400のキーワードがあり、近い将来に増加するため、すべてのタグを一度に解析してから提案を確認することはできません。 AutoCompleTeTextViewは、Google検索と同様に機能する必要があります。そのため、ユーザーが何かを入力し、その解析がUIスレッドで発生した場合にのみ解析する必要があります。

しかし、私はそのコールバックメソッドを取得できないか、ユーザーが何かを入力したか、テキストを編集している可能性があると感じるイベントである可能性があるため、このパーサーをトリガーすることができません。

setoneditoractionlistener ユーザーがソフトキーボードのENTERボタンを押した場合にのみ機能します。

前もって感謝します

役に立ちましたか?

解決

フィルターインターフェイスを使用して、これを実装できます。このタイプの目的のためだけに、filter.performfiltering()がUIスレッドから中止されます。これを行うために使用するコードは次のとおりです。

        Filter filter = new Filter() {

        @Override
        public CharSequence convertResultToString(Object resultValue) {
            return resultValue.toString();
        }

        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {
            if( charSequence == null ) return null;
            try {
                // This call hits the server with the name I'm looking for and parses the JSON returned for the first 25 results
                PagedResult results = searchByName( charSequence.toString(), 1, 25, true);
                FilterResults filterResults = new FilterResults();
                filterResults.values = results.getResults();
                filterResults.count = results.getResults().size();
                return filterResults;
            } catch (JSONException e) {
                return new FilterResults();
            }
        }

        @Override
        protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
            if( filterResults != null ) {
                adapter.clear();
                adapter.addAll( (List<MyObject>)filterResults.values );
            }
        }
    };

次に、フィルターを使用してください:

    private AutoCompleteTextView beverageName;
    ...

    beverageName = findViewById( R.id.beverageName );
    ListAdapter adapter = ...
    adapter.setFilter(filter);
    beverageName.setAdapter(adapter);

他のヒント

使用できます テキストウォッチャー ユーザーが編集ビューでテキストを変更するたびに何かを行うインターフェイス。テキストウォッチャーのメソッドの1つ以上を実装するだけで、通常使用します onTextChanged(). 。それが役立つことを願っています!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top