Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自动完成文本视图+;Json服务器动态获取标记_Java_Android_Json_Autocompletetextview - Fatal编程技术网

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

Java 自动完成文本视图+;Json服务器动态获取标记,java,android,json,autocompletetextview,Java,Android,Json,Autocompletetextview,我正在开发一个android应用程序。我的布局中有一个autocompleteTextView。我想用我的服务器提供的建议填充此textView。服务器上大约有400个关键字,它们在不久的将来会增加,所以我不能一次解析所有的标签,然后检查建议。autocompleteTextView的工作方式应该更像google搜索,这样我只在用户键入内容时进行解析,而这种解析是在UI线程上进行的 但我在这里无法触发该解析器,因为我无法获得该回调方法,或者可能是感觉到用户键入了某些内容或可能编辑了某些文本的事件

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

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

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


提前感谢

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

您也可以使用过滤器接口来实现这一点。事实证明,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 );
            }
        }
    };

我知道了,方法是setTextChangeListener,请参考以下链接
    private AutoCompleteTextView beverageName;
    ...

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