2

我正在开发一个安卓应用程序。我的布局中有一个 autocompleteTextView。我想用我的服务器的建议填充这个 textView。服务器上大约有 400 个关键字,并且它们会在不久的将来增加,因此我无法一次解析所有标签然后检查建议。autocompleteTextView 应该更像谷歌搜索,所以我只在用户输入内容并且解析发生在 UI 线程上时解析。

但是我在这里无法触发该解析器,因为我无法获得该回调方法,或者可能是感知到用户输入了某些内容或可能编辑了某些文本的事件。

setOnEditorActionListener 仅在用户按下软键盘上的 enter 按钮时起作用。

提前致谢

4

2 回答 2

3

您也可以使用 Filter 接口来实现这一点。原来 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);
于 2011-07-25T15:44:40.283 回答
0

每当用户更改 EditText 视图中的文本时,您都可以使用TextWatcher界面执行某些操作。只需实现一个或多个 TextWatcher 的方法,我通常使用onTextChanged(). 希望有帮助!

于 2011-07-25T15:30:48.097 回答