2011-11-02 55 views
0

我有一個ListView,這個想法是,當用戶輸入的內容不僅僅是提供給 的唯一字符串時,用戶將以該用戶的寫入開始。Android ListView:如何更改列表的內容?

如果每一個Android設備將不得不我可以用這個簡單的代碼來實現這種物理keyboared:

 ListView lv = getListView(); 
     lv.setTextFilterEnabled(true); 

但正如你可能知道像三星galaxi小號一些設備沒有物理keyboared 。

我所做的只是創建一個只有EditText的簡單佈局文件,而我使用了addHeaderView方法,因此我現在在列表上方有一個EditText(用戶可以輸入它)。 我想使用addTextChangedListener,所以我可以對用戶輸入的內容做出反應。

問題是如何更改顯示,以便它只顯示我想要的字符串(我沒有發現這些字符串的問題,問題是如何更新當前顯示) 或者如果有另一種解決方案要克服一些設備沒有物理鍵盤的事實,這也很好。

+0

你是什麼意思的「更新當前視頻」? –

+0

@Paresh Mayani - 改變用戶看到的字符串。 這個想法是在用戶鍵入一些東西 – Belgi

回答

0

我肯定要執行類似:ListView中應根據用戶鍵入的值進行更新,如果是這樣的話,那麼這裏有一個例子: Android ListView with Searchbox Sort items

+0

我在代碼中遇到了一個小問題: 當我在EditText中輸入一個字符時,它可以正常工作,當我嘗試鍵入另一個字符時,比如說'a',然後'b'比看到b寫下來更像沒有顯示以「ab」開頭的字符串。 – Belgi

0

一個解決方案可能是在AsyncTask中篩選顯示的列表,然後更新您的適配器中的列表。通過notifyDataSetChanged,該列表被更新以僅顯示您想要的項目。 這可能不是一個優雅的解決方案,但它對我很有用。

編輯: 這應該工作

void setTextChangedListenerToSearchBox(EditText etFilter) { 

    if (etFilter == null) 
     return; 

    etFilter.addTextChangedListener(new TextWatcher() { 

     public void afterTextChanged(Editable s) { 
      // nothing done here 
     } 

     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // nothing done here 
     } 

     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
      if (s.toString() != null) { 
       searchupdate(s.toString()); 
      } 
     } 

    }); 
} 


void searchupdate(String s) 
{ 
    final List<String> currentItems = new ArrayList<String>(yourCurrentlyDisplayedItems); 

    (new AsyncTask<String,Void,List<String>>() { 

     @Override 
     protected List<String> doInBackground(String... params) 
     { 
      List<String> listitems = new ArrayList<String>(); 

      for(String item : currentItems) { 
       if(item.contains(params[0])) { 
        listitems.add(item); 
       } 
      } 
      return listitems; 
     } 

     @Override 
     protected void onPostExecute(List<String> result) 
     { 
      adapter.clear(); 
      adapter.addAll(result); 
      adapter.notifyDataSetChanged(); 
     } 

    }).execute(s); 
} 
+0

感謝您的幫助時,對具有物理鍵盤的設備執行setTextFilterEnabled(true)操作。你可以添加代碼示例嗎? – Belgi