2012-12-26 57 views
1

我使用ListView顯示mysql表中的一些數據,並使用SimpleAdapter填充它。我添加onItemClickListener,以便能夠在用戶按列表中的某個項目時打開新的活動。這很好,但是當你選擇一個搜索列表的選項時,textfilter會過濾條目,但onItemClick不會將正確的「id」發送到新的活動。我搜索解決方案,每個人都解決了「adapter.notifyDataSetChanged」的問題,但它不適合我。這裏是代碼,也許有人可以幫忙。過濾列表後,OnItemClickListener中的ID不正確

list.setTextFilterEnabled(true); 
       myFilter.addTextChangedListener(new TextWatcher() { 
        public void afterTextChanged(Editable s) { 
        } 
        public void beforeTextChanged(CharSequence s, int start,int count, int after) { 
        } 
        public void onTextChanged(CharSequence s, int start, int before, int count) { 
         mSchedule.getFilter().filter(s.toString()); 

        } 

       }); 



       list.setOnItemClickListener(new OnItemClickListener() { 

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

          String ajdi = jArray.getJSONObject(position).getString("id").toString(); 
          Intent i = new Intent(Predlozi.this, PesmaPrikaz.class); 
          Bundle bandl = new Bundle(); 
          bandl.putString("id", ajdi); 
          i.putExtras(bandl); 
          startActivity(i); 

         } catch (JSONException e) { 
          ; 
         } 
        } 

       }); 

回答

0

但是當你選擇一個選項來搜索列表,textfilter是 過濾條目確定,但onItemClick不發送正確的「ID」 到新的活動。

這是一種正常行爲,因爲您很可能直接從用來填充適配器的列表/ json結構中獲取id。如果您然後過濾列表,並且過濾將刪除項目而不是位置將不正確,因爲列表中的元素較少。

相反,你應該得到適配器行數據,並從那裏id,假設你將它放在這裏(你現在應該做的):

public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     HashMap<Something, Something> rowData = (HashMap<Something, Something>)((SimpleAdapter)parent.getAdapter()).getItem(position); // I don't know what you pass to the adapter so edit this 
     // get the id from the `HashMap` above 
     // if you don't store the id in there, then edit your code to do this: 
     String id = rowData.get("the_key_for_the_Id"); 
     // send the Intent 
}  
+0

它完美!感謝隊友和節日快樂! – Stole51