自动完成文本视图+ Json服务器以动态获取标记

时间:2011-07-25 11:23:16

标签: java android json autocompletetextview

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

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

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

提前致谢

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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