2016-06-13 49 views
0

我有一個由String數組填充的ListView。用戶搜索edittext並從列表中過濾,但是當我在過濾後單擊其中一個列表項目時,所選項目不會被返回,而是完全返回。這就是爲什麼有人會錯:ListView在篩選到之前的活動後沒有返回選定的項目

過濾代碼:

et.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence cs, int start, int before, int count) { 

      adapter.getFilter().filter(cs); 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 


     } 

列表項上單擊代碼:

lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      String s = array[position]; 
      intent.putExtra(s); 
      setResult(RESULT_OK, intent); 
      finish(); 

     } 
    }); 

然後,我會讀通過OnActivityResult的字符串。問題是當列表被過濾時,列表項目被減少。在選擇其中一個項目時,返回縮小列表的位置編號,而不是數組。這就是爲什麼返回的字符串實際上是根據數組而不是根據簡化列表的字符串。我該如何克服這一點?

+1

能的你,而不是保持字符串數組,保持一個HashMap 與代表ID INT?然後基於用戶單擊,查看哪個項目具有給定的id並在原始HashMap中找到它。 – Vucko

回答

0

問題很簡單,當你過濾列表,點擊項目,你不會得到過濾項點擊因爲lv.setOnItemClickListener(new OnItemClickListener() {...}你逝去的position原始列表不過濾列表中。

解決辦法是,而不是從主力名單得到嘗試讓這樣的:

String a = array[parent.getItemAtPosition(position)]; 
or 
String a = array[adapter.getItem(position)]; 
or 
String a = array[(String) parent.getAdapter().getItem(position)]; 
相關問題