【问题标题】:Android Search fast performance in listview列表视图中的 Android 搜索快速性能
【发布时间】:2013-12-18 07:29:44
【问题描述】:

我正在android中制作一个搜索应用程序,我的搜索目的是当我在edittext中输入单词然后当textchange时,它会跳转到列表视图中以该字母开头的单词的位置。 这是我的代码。它工作得很好,但是当我在edittext中键入或删除时,文本的速度似乎很慢,不顺畅。 我该怎么做才能让它更快? 我有超过 20,000 个来自数据库的条目。

txtword.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence s, int start, int before, int count){
    // TODO Auto-generated method stub      
    for(int i =0;i<list.size();i++) 
    { 
        if(list.get(i).toLowerCase().startsWith(s.toString())) 
        {
            pos = i;
            break; 
        } 
    } 
    lv.setSelection(pos);                   
}

【问题讨论】:

    标签: android android-listview full-text-search android-sqlite performance-testing


    【解决方案1】:

    您可以使用 patricia trie 数据结构来执行搜索: 以下是典型的步骤:

    1. 将您的字符串填充到帕特里夏树中。
    2. 查找以onTextChanged() 中输入的字符开头的字符串。它将返回一个子树。对于输入的下一个字符,在该子树中搜索。
    3. 从 editText 中删除文本后,返回 trie 中的上一级。

    这里是参考: https://code.google.com/p/patricia-trie/ 而且,这是一个示例: https://code.google.com/p/patricia-trie/wiki/Examples

    【讨论】:

    • 通过使用这个,我可以让我的listview从edittext中的单词跳转到特定位置吗?
    • 是的,只需使用新的 sub-patricia tie 更新适配器并调用 listView.notifyDatasetChanged();
    • 我对 Patricia Trie 的用法真的很陌生,你能告诉我代码吗?
    • 答案中提到了示例示例的链接,您可以探索它。如果有任何疑问,请询问我。
    • 以上链接无效
    【解决方案2】:

    您可以在 Listview 的 baseAdapter 和 arrayadapter 中用户搜索过滤器。 用这个

    1)https://stackoverflow.com/a/2726348/942224

    2)https://stackoverflow.com/a/14359161/942224

    获取详细信息。

    【讨论】:

      【解决方案3】:

      您可能认为迭代超过 20000 的 ArrayList 可能会占用大量资源。我认为你必须重新评估问题以及如何解决它。

      您为什么不尝试通过 SQL 请求进行研究?您可以使用“LIKE”运算符。

      SQLite Android Doc Like operator example

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-02
        • 2011-07-13
        • 2011-05-11
        • 1970-01-01
        相关资源
        最近更新 更多