PopupMenu避免单击键盘时解除

时间:2017-07-06 09:21:31

标签: android

我无法找到答案而面临问题。我有一个带TextWatcher的editText来查找数据库中的结果列表。我在PopupMenu中显示结果。它看起来像这样:

enter image description here

final List<SearchResult> searchResults = new ArrayList<>();

    final PopupMenu menu = new PopupMenu(getActivity(), binding.bottomSheetWriteNews.editTextNewsSubCategory);
    menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            binding
                    .bottomSheetWriteNews
                    .editTextNewsSubCategory
                    .setText(item.getTitle());

            return false;
        }
    });


    final Realm realm = Realm.getDefaultInstance();

    binding.bottomSheetWriteNews.editTextNewsSubCategory.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            searchResults.clear();
            menu.getMenu().clear();

            RealmResults<SubCategory> subCategoriesResult = realm.where(SubCategory.class).contains("name", s.toString(), Case.INSENSITIVE).findAll();
            for(SubCategory subCategory : subCategoriesResult) {
                searchResults.add(new SearchResult(subCategory.getId(), subCategory.getName(), false));
                menu.getMenu().add(subCategory.getName());
            }
            menu.show();
        }

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

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

我的问题是每次我点击键盘弹出菜单被忽略而不是键入我想要的角色。这对用户来说很烦人且无法使用。我想点击键盘不要忽略PopupMenu。我知道在官方文档中它写的是Touching outside of the popup will dismiss it,但我使用的是Google Keep,它们具有相同的功能(键入文本显示PopupMenu来过滤结果)而没有我的问题。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您可以使用

而不是使用弹出菜单
  

微调器或(列表视图或回收者视图)

并执行notifyDataSetChanged().

这样布局就不会打桩(关闭和打开)

希望它会对你有所帮助。

答案 1 :(得分:0)

在我与同事找到替代解决方案后回应我自己的回答。有一个名为autoCompleteTextView的特定EditText可以使用ArrayAdapter。它会搜索你。以下是我实施它的方法:

final Realm realm = Realm.getDefaultInstance();
    RealmResults<SubCategory> subCategoriesResult = realm.where(SubCategory.class).findAll();
    List<String> categoryName = new ArrayList<>();
    for(SubCategory subCategory : subCategoriesResult) {
        categoryName.add(subCategory.getName());
    }
    String[] stringArray = categoryName.toArray(new String[0]);


    ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
            android.R.layout.simple_dropdown_item_1line, stringArray);
    binding.bottomSheetWriteNews.autoCompleteTextViewNewsSubCategory.setAdapter(adapter);

仅此而已!键入两个字符后,结果列表将显示为PopupMenu。

在任何情况下,如果某人有一个解决方案,以便在显示PopupMenu时点击键盘后避免解雇,我很感兴趣。谢谢!