列表<item> </item>的setVisibility

时间:2012-05-30 08:07:18

标签: java android list adapter

我得到了这段代码:

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();一起使用呢?

3 个答案:

答案 0 :(得分:1)

尝试使用两个列表,一个包含所有结果,另一个包含搜索结果。始终显示第二个列表,如果要显示整个列表,只需将第二个列表指向第一个列表。 类似的东西:

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);
}

答案 1 :(得分:0)

如果这是一个解决方案,我用“更新按钮”解决了这个问题。使用空搜索模式,我只需再次加载整个列表。

答案 2 :(得分:0)

每次使用列表时尝试建立必要的条件。