2012-04-14 21 views
0

我使用SimpleAdapter的ListActivity使用simple_items_list_2佈局顯示2項目列表。一個HashMap ArrayList包含項目。在列表中選擇了錯誤的項目

該列表必須保存我從不同的UDP數據包接收到的數據。所以,我有另一個線程,收到這些數據包。從那裏,使用處理程序,它發送收到的數據,並將項目添加到列表中。

現在我正確接收數據包,甚至生成列表。但是,當我選擇說項目B時,它有時會選擇項目A.

以下是代碼片段:

在OnCreate(),

 lv = getListView(); 

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

     String[] from = { "name", "address" }; 
     int[] to = { android.R.id.text1, android.R.id.text2 }; 

     adapter = new SimpleAdapter(getApplicationContext(), list, 
       android.R.layout.simple_list_item_2, from, to); 
     setListAdapter(adapter); 

在處理程序中的代碼,它會從線程內容的消息後:

 list.add(putData(scanned_name, scanned_addr)); 
     adapter.notifyDataSetChanged(); 
      lv.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 

       TextView name_tv = (TextView) findViewById(android.R.id.text1); 
       TextView addr_tv = (TextView) findViewById(android.R.id.text2); 

       selectedName = name_tv.getText().toString(); 
       selectedAddr = addr_tv.getText().toString(); 

用於放置數據的HashMap函數:

private HashMap<String, String> putData(String name, String address) { 
     HashMap<String, String> item = new HashMap<String, String>(); 
     item.put("name", name); 
     item.put("address", address); 
     return item; 
    } 

有什麼幫助嗎?

回答

2

我認爲你需要使用view.findViewById

TextView name_tv = (TextView) view.findViewById(android.R.id.text1); 
TextView addr_tv = (TextView) view.findViewById(android.R.id.text2); 
+0

是好像從我所理解的工作,在我的代碼我得到了TextView的是列表中的第一和添加視圖使得項目的TextView的點擊? – Alabhya 2012-04-14 21:51:05

+0

是的,當您單擊某個項目時,會引發** onItemClick **事件,並將該項目的視圖作爲參數之一傳遞。因此,使用該視圖來讀取名稱和地址 – waqaslam 2012-04-14 21:56:37