Android Listview搜索

时间:2013-12-16 10:39:34

标签: android listview android-sqlite

我使用EditTextListView在Android中制作程序。我想使用上面的ListView搜索EditText项目。将数据填充到ListView后,当用户在EditText中输入文字时,ListView将滚动到该文字的位置开头。示例:我有项目: [苹果,应用程序,书籍,男孩,汽车,猫,现金.....] 当我在EditText中输入b然后ListView将滚动到预订。我想使用listview.setSelection(position),但我不知道如何从EditText搜索获得该位置。我使用下面的代码,它运行良好,但是当我们在EditText中搜索时,它似乎很慢。我怎么能这样做并顺利运行? 谢谢你的进步。


我使用以下代码:

YOUR_EDITTEXT.addTextChangedListener(new TextWatcher() {

public void onTextChanged(CharSequence s, int start, int before, int count) {

    //LOGIC MAY DIFFER ACCORDING TO YOUR REQUIREMENT..
    int POSITION = 0;
    for(int i =0;i<list.size();i++) {
        if(list.get(i).startsWith(s.toString()))
        {
            POSITION = i;
            break;
        }
    }
    listview.smoothScrollToPosition(POSITION);

}

public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub

}

public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
    // TODO Auto-generated method stub

}
});

1 个答案:

答案 0 :(得分:0)

由于您有20,000个列表条目,因此每次用户更改文本时,您当前所执行的操作都会很慢,因为您最多可执行20,000 startsWith()个操作。

那你能做什么:

最简单的解决方案:

用户输入时请勿选择条目。让他完成并单击一个搜索按钮,然后只对每个文本更改执行您当前所做的操作。

数据库解决方案:

如果您在数据库中有条目,请进行查询以获取该职位。这比在代码中搜索要快得多。如果你不这样做,你能把它放到数据库中吗?是否值得效果还是“最简单的解决方案”足够好?

尽量聪明:

您可以尝试在用户输入时收集信息,并将其用于您的优势。假设用户开始输入Hello。输入H后,您会找到以H开头的第一个项目,例如位置1000.现在,当用户键入e时,您不必从头开始,但可以从位置1000开始,依此类推。当然,当用户删除某个字符或粘贴另一个文本等时,您还必须处理这些情况,因此这里涉及一些编程逻辑。