列表中选择了错误的项目

时间:2012-04-14 21:37:17

标签: android listview arraylist listactivity simpleadapter

我有一个带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;
    }

任何帮助?

1 个答案:

答案 0 :(得分:2)

我认为您需要使用view.findViewById

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