java - 使用 SearchView 作为 ListView Java 的位置问题

标签 java android position searchview

我有一个 ListView ,其中填充了这些单词

    arrayList.add("apple");
    arrayList.add("banana");
    arrayList.add("bell");
    arrayList.add("cheese");

如果我单击一行,则会出现一条消息

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Toast.makeText(getApplicationContext(), arrayList.get(position), Toast.LENGTH_SHORT).show();
        }
    });

我有一个搜索 View ,可以过滤掉用户输入之外的单词

editText.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) {
            String text = editText.getText().toString().toLowerCase(Locale.getDefault());
            adapter.getFilter().filter(text);

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

如果我在搜索 View 中输入“b”,则 ListView 中只有“banana”和“bell”。但如果我点击“香蕉”, toast 就会说“苹果”。我明白问题是什么以及为什么这样做,但我不知道解决它的简单方法。

解决这个问题的一种方法就像这样......

int textLength = text.length();

            if (textLength == 0) {
                test.addAll(arrayList);
            } else {

                int counter = 0;

                for (String string : arrayList) {

                    if (string.toLowerCase().substring(0, textLength).equals(text)) {
                        test.add(string);
                        intPositions.add(counter);
                    }

                    counter++;
                }
            }

如果我这样做,我的 ListView 的 onClickListener 会更改为这样

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            int i = intPositions.get(position);

            Toast.makeText(getApplicationContext(), arrayList.get(i), Toast.LENGTH_SHORT).show();
        }
    });

注意:仅当用户在单击行之前在搜索 View 中键入内容时,此功能才有效。

这很好,但如果我的 arrayList 有 2000、3000 或 5000 个项目,这不是一个非常有效的方法。如有任何帮助,我们将不胜感激。

最佳答案

更改以下代码:

Toast.makeText(getApplicationContext(), arrayList.get(position), Toast.LENGTH_SHORT).show();

使用以下代码:

String text = ((TextView) view).getText().toString();
Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();

关于java - 使用 SearchView 作为 ListView Java 的位置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43794922/

相关文章:

java - 无法创建监听器 - 传递参数时遇到问题

java - 如何在 ExecutorService 的执行者之间进行同步

java - 如何用java为mysql中的数据编写条形图

android - 我如何在 Android 运行时请求权限?

java - 使用 RxAndroid 生成树排序结构

css - z-index 不适用于 wordpress 菜单后面的图像

java - 如何通过点击邮件中的链接获取 Gmail ID

java - Android Studio变黑并卡住

css - 在文本区域内放置标签文本

html - 将父元素内的两个元素定位为相同高度