将ListView行文本放入变量

时间:2013-12-13 02:42:53

标签: android string listview variables onitemclicklistener

我无法理解这一点,我可以设法点击列表视图的哪个行号。但我无法弄清楚如何将所选列表行的文本放入变量中。我只需要移动到特定于所选列表行的内容。任何帮助或方向都会很棒,谢谢!

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


        XMLParser parser = new XMLParser();
        String xml = parser.getXmlFromUrl(URL); // getting XML from URL
        Document doc = parser.getDomElement(xml); // getting DOM element

        NodeList nl = doc.getElementsByTagName(KEY_SONG);
        // looping through all song nodes <song>
        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            Element e = (Element) nl.item(i);
            // adding each child node to HashMap key => value
            map.put(KEY_ID, parser.getValue(e, KEY_ID));
            map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
            map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
            map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
            map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));

            // adding HashList to ArrayList
            songsList.add(map);
        }


        list=(ListView)rootView.findViewById(R.id.list);

        // Getting adapter by passing xml data ArrayList
        adapter=new LazyAdapter(getActivity(), songsList); ;        
        list.setAdapter(adapter);


        // Click event for single list row
        list.setOnItemClickListener(new OnItemClickListener() {

            @Override public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
            { 
                String TEST = arg0.getItemAtPosition(position).toString();


                Toast.makeText(getActivity(), TEST, Toast.LENGTH_SHORT).show();
            }
                });




        return rootView;        
    }   
}

2 个答案:

答案 0 :(得分:0)

onItemClick()中的第三个参数是position 将此position用于与ListView关联的ListAdapter中的.getItem()。 然后,您可以按正常方式从该项目中获取文本。

<强> <Additional>

要获取与ListView相关联的ListAdapter,您将使用arg0.getAdapter()。因此,完整的方法调用变为arg0.getAdapter().getItem(position)

但正如ρяσѕρєяK指出的那样,你使用名为songList的ArrayList定义了ListAdapter。
您定义的songList是HashMaps的ArrayList 因此,当您调用arg0.getAdapter().getItem(position)时,将返回的是位于ArrayList中名为songList的那个位置的HashMap。 由于HashMap是将要返回的内容,因此您应该编写如下内容:

HashMap selectedItemHashMap = (HashMap)arg0.getAdapter().getItem(position);

然后,您可以使用以下命令从HashMap检索相关数据:

selectedItemHashMap.get(...//The relevant key for the data you want to get out of the HashMap...)

答案 1 :(得分:0)

因为您将ArrayList的{​​{1}}传递给HaspMap,所以LazyAdapter会在所选行的位置返回getItemAtPosition而不是HaspMap }。将选择行元素设置为:

String