2012-11-28 57 views
0

我有一個ListView充滿了ArrayAdapter的數據,我實現了搜索功能,因爲列表非常長。帶搜索功能的ListView沒有預期的行爲

比方說,我有這樣的名單:

0 - 橙 1 - 蘋果 2 - 番茄(Tomatoes) 3 - 鱷魚 4 - 火車 5 - 龜 6 - 狗 7 - 貓

好吧,現在我用EditText過濾這個列表,我寫了一個t。然後,名單將是:

0 - 番茄(Tomatoes) 1 - 火車 2 - 龜

的問題是,我實現了一個onItemClickListener這樣我就可以訪問到網頁或其他取決於項目當我點擊第一個(0 - tometoe)時,它會在沒有過濾的情況下(0 - 橙色)選擇列表第一個元素的(0),當我點擊第二個元素(1-列)時,它會選擇該列表的第一個元素沒有過濾(1 - 蘋果)等(1)等...

這裏是我使用的代碼:

ListView lv = new ListView(this); 
     final String[] tricks; 

     final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listviewcustom, tricks); 

     lv.setAdapter(adapter); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(android.widget.AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
       showTrick(arg2, tricks[arg2], modality); 
       //Log.e("itemClickListener", String.valueOf("LISTVIEWJ  " + arg2 + " - " + tricks[arg2] + " - " + modality)); 
      } 
     }); 

     searchBox.addTextChangedListener(new TextWatcher() { 

      public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
       adapter.getFilter().filter(cs); 
      } 

      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { } 

      public void afterTextChanged(Editable arg0) { } 
     }); 

     tricksLayout.addView(lv, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 

所以我的問題是:我如何設法讓它工作,因爲我想?

謝謝你的優勢!

+0

你是否在'adapter.getFilter()。filter(cs);'''後面調用'notifyDataSetChanged'? – Wenhui

回答

1

我沒有完全理解你的問題。以下是我從你的問題中瞭解到的答案,如果這不是你問的問題,請發表評論我將編輯我的答案。

製作一個ArrayList並填充它。

ArrayList<String> list = new ArrayList<String>(); 

list.add("orange"); //1 
list.add("apple"); //2 
list.add("tomatoe"); //3 
list.add("alligator"); //4 
list.add("train"); //5 

在過濾你的ListView這樣 0 - 番茄(Tomatoes)1 - 火車2 - 龜

而現在onItemClickListener當您單擊上編輯

位置1

String temp = here you get "train" at index 1 
//temp = "train" 

int i = termsList.indexOf("train"); 
// it will give you actual position of train which is 5 

同樣使用notifyDataSetChanged正確更新列表。

+0

好的,我明白了,我知道如何實現它,但是......我正在尋找能夠自動執行的操作。作爲對我的問題的一個評論,文匯誰說了一些關於'notifyDataSetChanged'的內容。我會看看。如果我沒有更多的選擇,我會檢查你的是好的;) –

+0

在adapter.getFilter()。filter(cs);'後面加上這行'adapter.notifyDataSetChanged();',看它是否工作。 – Wenhui

+0

@Wenhui同樣的問題...它仍在挑選未過濾列表的值... –