0

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

回答

2

可以使用帕特丽夏特里数据结构进行搜索: 下面是典型的步骤:

  1. 填充你的字符串到帕特里夏线索。
  2. 执行查找字符串onTextChanged()中的输入字符开始。它会返回一个子树。对于下一个输入的字符,请在该子树中搜索。
  3. 当从editText中删除文本时,请返回trie中的一个级别。

下面是引用: https://code.google.com/p/patricia-trie/ 而且,这里是一个示例例如: https://code.google.com/p/patricia-trie/wiki/Examples

+0

利用这一点,我可以让我的列表视图跳转到从EditText上字的具体位置? –

+0

是的,只需更新适配器和新的分区绑定并调用listView.notifyDatasetChanged(); –

+0

我对Patricia Trie的用法真的很陌生,你能告诉我代码吗? –

0

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

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

SQLite Android Doc Like operator example