2013-12-13 70 views
0

我无法得到我的头,我可以设法得到哪个列表视图的行号被点击。但我无法弄清楚如何将选定列表的文本放入一个变量中。我只需要移动到特定于所选列表行的内容即可。任何帮助或方向将是伟大的,谢谢!把ListView行文本放入变量

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;   
    } 
} 

回答

0

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

<Additional>

为了让您的ListView你会用arg0.getAdapter()相关的ListAdapter。所以完整的方法调用变成arg0.getAdapter().getItem(position)

但是正如K指出的那样,您使用称为songList的ArrayList定义了ListAdapter。
您定义的songList是一个HashMap的ArrayList。
因此,当您调用arg0.getAdapter().getItem(position)时,将返回的是位于ArrayList中该位置的HashMap,名为songList。
由于一个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...) 
+0

感谢的帮助下,我还是老样子想出'7月12日至十三日:43:29.645:E/AndroidRuntime(654):致命异常:主要7月12日至一十三日: 43:29.645:E/AndroidRuntime(654):java.lang.ClassCastException:java.lang.Integer不能转换为java.util.HashMap'任何想法? – snlan

+0

将您的新代码修改版本和完整的LogCat输出添加到问题的底部,以帮助澄清发生了什么。 –

+0

好吧,我知道了,我不知道为什么我没有早点做。感谢您的帮助 'String name =((TextView)view.findViewById(R.id.title))。getText()。toString();' – snlan

0

由于您所传递的HaspMapArrayListLazyAdapter,所以getItemAtPosition将在选定行的位置返回HaspMap而不是String。设置选择行元素:

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

      String str_title=selected_row.get(KEY_TITLE); 
      String str_artist=selected_row.get(KEY_ARTIST); 
     //.... 
    } 
+0

谢谢,但我现在收到以下错误92行hashmap行你给我)'12-13 07:43:29.645:E/AndroidRuntime(654):致命例外:主 12-13 07:43:29.645:E/AndroidRuntime(654):java.lang.ClassCastException: java.lang.Integer不能转换为java.util.HashMap' – snlan