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