【问题标题】:AutoCompleteTextView Adapter not dropdown onTextChange?AutoCompleteTextView 适配器没有下拉 onTextChange?
【发布时间】:2017-05-09 20:04:55
【问题描述】:

我正在处理AutoCompleteTextView。适配器没有根据我的OnTextChangeListener 填充任何数据,它在初始化时是第一次。

  public void fn_LoadLrnoDetail(ArrayList<String> lst_Name) {
    try {
        progressBar.showDialog();
        Adapter = new ArrayAdapter<String>(getContext(),
                android.R.layout.simple_dropdown_item_1line, new ArrayList<String>());

        autotxtLrno.setAdapter(Adapter);

        if (lst_Name != null && lst_Name.size() > 0) {
            Adapter = new ArrayAdapter<String>(getContext(),
                    android.R.layout.simple_dropdown_item_1line, lst_Name);
            autotxtLrno.setAdapter(Adapter);
            Adapter.notifyDataSetChanged();
        }
        progressBar.hideDialog();
    } catch (Exception e) {
        Log.e(TAG, "fn_LoadLrnoDetail: " + e.getLocalizedMessage());
    }
}

这是我的AutoCompleteTextView 方法。问题是无论第一次有什么数据,即使数据根据OnTextChangeListener发生变化,它仍然保持不变。

    autotxtLrno.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            halfClear();
            custom_list.clear();
            Log.e(TAG, "onTextChanged: " + lst_Name.size() + "  " + lst_Name);
            for (String custom : lst_Name) {
                if (custom.contains(autotxtLrno.getText().toString())) {
                    custom_list.add(custom);
                }

            }
            Log.e(TAG, "custom: " + custom_list + "  " + custom_list.size());
            if (custom_list.size() > 0) {
                fn_LoadLrnoDetail(custom_list);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
            Adapter.notifyDataSetChanged();
        }
    });

这是OnTextChangedListener 的方法。如果我更改了文本,则不会填充任何内容。 你能告诉我我在哪里犯了错误。

任何帮助将不胜感激。提前致谢

【问题讨论】:

  • 你的数据来自 sqlite 数据库,对吧?所以使用SimpleCursorAdapter 并设置它的FilterQueryProvider:可能需要10 行代码,仅此而已,不需要任何TextWatcher
  • 是的。我的数据来自SQLite,知道如何实现吗?
  • 我已经告诉过你:使用SimpleCursorAdapter 并设置它的FilterQueryProvider,你需要做的就是从runQuery 返回一个Cursor 方法:最多10 行代码
  • 如果您希望它更短,那么 10 行代码会覆盖您自定义 runQueryOnBackgroundThread() 中的 runQueryOnBackgroundThread()
  • 仍然无法做到这一点

标签: android autocomplete android-arrayadapter


【解决方案1】:

问题是无论第一次有什么数据,它仍然保持不变 数据根据 OnTextChangeListener 变化

解决方案

每次数据更改时,您都在创建新适配器。

          if (lst_Name != null && lst_Name.size() > 0) {

This line-->   Adapter = new ArrayAdapter<String>(getContext(),
                            android.R.layout.simple_dropdown_item_1line, lst_Name);
             autotxtLrno.setAdapter(Adapter);
             Adapter.notifyDataSetChanged();

而是将您的 adpater 初始化移动到 oncreate 方法 clear 并将适配器设置为 listView 并调用 notifyDataSetChanged这样的方法

Adapter.clear();
Adapter.add(lst_name)
autotxtLrno.setAdapter(Adapter);

【讨论】:

  • 但它会填充我在初始化时放置的任何数据
  • 不,还是同样的问题。过滤器未应用
  • 即使我也尝试在onTextChanged 中更改适配器但没有运气
猜你喜欢
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
相关资源
最近更新 更多