0

現在我正在使用edittext和listview在android中製作一個程序。我想使用上面的edittext搜索listview項目。將數據填充到列表視圖後,當用戶在edittext中鍵入文本時,listview將滾動到以該文本開始的位置。例如:我有項目:蘋果,應用程序,書籍,男孩,汽車,貓,現金.....當我在edittext中鍵入b然後listview將滾動到書。我想使用listview.setSelection(position),但我不知道如何從我的edittext搜索中獲得位置。我希望每個人都可以幫助我。感謝進步!Android Listview從edittext搜索

+0

我想你正在使用textwatcher ..要麼你維護一個單獨的arraylist過濾列表或比較id的內容 – Carbon

回答

0

您可以在以下步驟中執行此操作。

  1. 檢查輸入的單詞是否在您的列表視圖中可用。
  2. 如果是,則分別在數組列表或您的列表視圖中獲取該單詞的id或位置。
  3. 然後將選擇設置爲檢索的ID。

如果你仍然無法得到ID,然後在認罪後您使用的字符串數組的自定義陣列適配器

Sol的代碼:

在你的情況下,它也能像

這代碼應該在你的oncreate或無論你在哪裏啓動你的列表視圖

HashMap<String,String> map=new HashMap<String, String>(); 
for(int i=0; i<arrlist.size();i++) 
{ 
    map.put(arrlist.get(i).trim().toLowerCase(), ""+i+1); 
} 

要獲得值米哈希映射 此代碼將您的搜索按鈕,點擊

String id= map.get("yourserchitem") 
lv.setSelection(Integer.parseInt(id)-1); 

上的文字換寫這段代碼 這裏e是我editext

e.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // TODO Auto-generated method stub 

     } 

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

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 
      if(arr.contains(e.getText().toString().trim().toLowerCase())) 
      { 
       String id= map.get(e.getText().toString().trim().toLowerCase()); 
       lv.setSelection(Integer.parseInt(id)-1); 
      } 
     } 
    }); 

變化代碼中afterTextChanged的對象與

String middle_string=""; 
      for(int i=0;i<arr.size();i++) 
       { 
        if(arr.get(i).startsWith(e.getText().toString().trim().toLowerCase())) 
        { 
         middle_string=arr.get(i); 
         break; 
        } 
       } 
      if(arr.contains(middle_string)) 
      { 
       String id= map.get(middle_string); 
       lv.setSelection(Integer.parseInt(id)-1); 
      } 
+0

我已經測試過它:它的工作,但我有超過20,000條目,所以每次我的編輯文本改變:它必須循環找到id,然後選擇該ID。所以,這使我的程序運行緩慢。我該如何讓它運行得更快? : 對(INT I = 0; I <則爲list.size();我++) \t \t \t { \t \t \t \t如果(list.get(ⅰ).toLowerCase()startsWith(S。的toString())) \t \t \t \t { \t \t \t \t \t POS = I; \t \t \t \t \t break; \t \t \t \t \t} \t \t \t \t} \t \t lv.setSelection(POS); –

+0

然後您應該將每個條目與一個id關聯。你可以使用哈希映射。在哈希映射中,使用name作爲key和id作爲值,而不是遍歷完整列表,只需在搜索按鈕的單擊上通過傳遞名稱作爲鍵,就可以簡單地獲取id。 –

+0

親愛的主席先生,你能告訴我更多關於如何使用哈希映射的細節嗎? 請告訴我關於此的代碼!謝謝 –

0

你有沒有聽說過AutoCompleteTextView(ACTV)。

只需傳遞你必須ACTV的單詞數組。所以當用戶開始輸入時,會根據您擁有的單詞列表來預測單詞。這更像是Google即時搜索。請嘗試並讓我們知道

+0

我知道它!但在我的情況下,我想用listview!你能告訴我怎麼辦? –