Android - AutoCompleteTextView动态更新问题

发布于 2024-12-17 18:27:07 字数 2089 浏览 2 评论 0原文

好吧,我试图在每次使用 TextWathcer 更改文本时动态更新 autoCompleteTextview ArrayAdapter。

每次文本更改时,新的 AsyncTask 中都会有一个 http 请求,并且在异步任务(onPostExecute)的回调中,我从适配器调用clear()并向其添加新项目,然后调用notifyDataSetChanged。 不幸的是,自动完成下拉列表从未显示。

请问,我该去哪里?!

这是代码:

AutoCompleteTextView acCountry = (AutoCompleteTextView)layout.findViewById(R.id.autoComplete);
final ArrayAdapter<RMAutoComplete.ListItem> countriesAdapter = new ArrayAdapter<RMAutoComplete.ListItem>(this.context,android.R.layout.simple_dropdown_item_1line);
acCountry.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (s.length() > 1)
                {
                    new AsyncTask<String, Void, List<RMAutoComplete.ListItem>>(){

                        @Override
                        protected List<ListItem> doInBackground(String... params) {
                            List<ListItem> l = null;
                            try {
                                l = location.getCountryData(params[0]);
                            } catch (Exception e) {
                                Log.e(TAG,"error when getCountryData",e);
                            }
                            return l;
                        }

                        @Override
                        protected void onPostExecute(List<ListItem> countries) {
                            countriesAdapter.clear();
                            if (countries != null)
                                for (ListItem listItem : countries) {
                                    countriesAdapter.add(listItem);
                                }
                            countriesAdapter.notifyDataSetChanged();
                        }
                    }.execute(s.toString());
                }
            }

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

            public void afterTextChanged(Editable s) {}
        }
    );

well i'm trying to update the autoCompleteTextview ArrayAdapter dynamiclly each time text changed by using TextWathcer.

every time text changed there is an http request in a new AsyncTask and in the callback from the async task (onPostExecute) i call clear() from the adapter and adding new items to him and then call notifyDataSetChanged.
Unfortunately the auto complete drop down is never shown..

please, where do i go worng?!

here is the code:

AutoCompleteTextView acCountry = (AutoCompleteTextView)layout.findViewById(R.id.autoComplete);
final ArrayAdapter<RMAutoComplete.ListItem> countriesAdapter = new ArrayAdapter<RMAutoComplete.ListItem>(this.context,android.R.layout.simple_dropdown_item_1line);
acCountry.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (s.length() > 1)
                {
                    new AsyncTask<String, Void, List<RMAutoComplete.ListItem>>(){

                        @Override
                        protected List<ListItem> doInBackground(String... params) {
                            List<ListItem> l = null;
                            try {
                                l = location.getCountryData(params[0]);
                            } catch (Exception e) {
                                Log.e(TAG,"error when getCountryData",e);
                            }
                            return l;
                        }

                        @Override
                        protected void onPostExecute(List<ListItem> countries) {
                            countriesAdapter.clear();
                            if (countries != null)
                                for (ListItem listItem : countries) {
                                    countriesAdapter.add(listItem);
                                }
                            countriesAdapter.notifyDataSetChanged();
                        }
                    }.execute(s.toString());
                }
            }

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

            public void afterTextChanged(Editable s) {}
        }
    );

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别靠近我心 2024-12-24 18:27:07

常见错误:您是否将适配器设置为 acCountry

Common mistake : Did you set the adapter to acCountry at all?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文