我得到了这段代码:

public void cap_search(){
        EditText search = (EditText) findViewById(R.id.search);
        String str_search = null;
        adapter = new ItemListAdapter(this, data);
        setListAdapter(adapter);

        str_search = search.getText().toString();
        for (int i = data.size()-1; i >= 0; i--){
            if (!data.get(i).getCaption().contains(str_search)){
                 data.remove(i);
            }
         }
    }


我将解释此代码及其在代码中的作用:

人们可以看到帽子的清单,他们可以检查自己拥有的所有帽子。
但是因为有很多限制,所以我内置了搜索功能。因此,当他们键入:“ A”时,列表应仅显示包含“ A”的大写字母。
到此为止一切正常,现在是问题所在。
在他们键入:“ A”之后,我删除了所有不包含它的项目。但是,当用户删除“ A”并键入“ B”时,它应该检查整个列表(也包括不以“ A”开头的已删除列表),但不会,因为我删除了它们。

那么有可能使这些项目不可见而不是将其删除吗?
还是解决该问题的另一种方法?

我希望清楚,如果不能请说出来,那么我将尽力解释它。

已经感谢Bigflow

编辑1:

尝试了许多答案,但我无法正常工作。
有人有更多的主意吗?
TextWatcher看起来很酷,但是对我来说太难了,这是我尝试实现的第二个项目,但是这次我无法使其正常工作。
我也从未使用过SQL。

那么其他人还有其他答案吗?或者也许是一个对textwatcher很好的人,您能不能使我成为我的一个。在大多数情况下,互联网上的文本监视程序示例对于我来说太复杂了。我真的很感激。

编辑2:

我仍在弄清楚这个选项/功能,但是与adapter.getfilter();一起使用怎么办?

最佳答案

尝试使用两个列表,一个包含所有结果,一个包含搜索结果。始终显示第二个列表,如果要显示整个列表,只需将第二个列表指向第一个列表即可。
就像是:

private List<Item> displayData = new ArrayList<Item>();

public void cap_search(){
        EditText search = (EditText) findViewById(R.id.search);
        String str_search = null;

        str_search = search.getText().toString();
        displayData.clear();
        if (str_search == null || str_search.equals("")) {
            displayData.addAll(data);
        } else {
            for (int i = data.size()-1; i >= 0; i--){
                if (data.get(i).getCaption().contains(str_search)){
                    displayData.add(data.get(i));
                }
            }
        }
        adapter = new ItemListAdapter(this, displayData);
        setListAdapter(adapter);
}

10-08 00:51