问题描述
- lazyadapter 列表视图
- 我想把 ListView 中 selected item 的值传递到另一个 activity 中。
我用下面的代码获取 hashmap 的相关细节,但是却获得java.lang.Integer cannot be cast to java.util.HashMap
错误。public void onItemClick(AdapterView<?> parent View view int position long id) { HashMap<String String> o = (HashMap<String String>) list.getItemAtPosition(position); Toast.makeText(CustomizedListView.thisID '"" + o.get(""KEY_TITLE"") + ""' was clicked."" Toast.LENGTH_SHORT).show(); }
如何修改呢?
public class CustomizedListView extends Activity { // All static variables static final String URL = ""https://itunes.apple.com/us/rss/topalbums/limit=20/json""; // XML node keys static final String KEY_SONG = ""song""; // parent node static final String KEY_ID = ""id""; static final String KEY_TITLE = ""title""; static final String KEY_ARTIST = ""artist""; static final String KEY_DURATION = ""duration""; static final String KEY_THUMB_URL = ""thumb_url""; ListView list; LazyAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ArrayList<HashMap<String String>> songsList = new ArrayList<HashMap<String String>>(); JSONObject json = JSONfunctions.getJSONfromURL(URL); try { JSONObject arr2 = json.getJSONObject(""feed""); JSONArray arr = arr2.getJSONArray(""entry""); for (int i = 0; i < arr.length(); i++) { JSONObject e1 = arr.getJSONObject(i); JSONArray arr3 = e1.getJSONArray(""im:image""); JSONObject arr8 = e1.getJSONObject(""im:name""); JSONObject arr10 = e1.getJSONObject(""im:artist""); JSONObject e12 = arr3.getJSONObject(0); // creating new HashMap HashMap<String String> map = new HashMap<String String>(); map.put(KEY_THUMB_URL e12.getString(""label"")); map.put(KEY_ARTIST arr8.getString(""label"")); map.put(KEY_TITLE arr10.getString(""label"")); // adding HashList to ArrayList songsList.add(map); } } catch (JSONException e) { // Log.e(""log_tag""Error parsing data ""+e.toString()); Toast.makeText(getBaseContext()Network communication error!"" 5).show(); } list=(ListView)findViewById(R.id.list); // Getting adapter by passing xml data ArrayList adapter=new LazyAdapter(this songsList); list.setAdapter(adapter); // Click event for single list row list.setOnItemClickListener(new OnItemClickListener() { @SuppressWarnings(""unchecked"") @Override public void onItemClick(AdapterView<?> parent View view int position long id) { HashMap<String String> o = (HashMap<String String>) list.getItemAtPosition(position); Toast.makeText(CustomizedListView.thisID '"" + o.get(""KEY_TITLE"") + ""' was clicked."" Toast.LENGTH_SHORT).show(); } }); } }
但是下面的同样的代码可以运行,这是为什么呢?
这个例子中是 SimpleAdapterpublic class Main extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listplaceholder); ArrayList<HashMap<String String>> mylist = new ArrayList<HashMap<String String>>(); JSONObject json = JSONfunctions.getJSONfromURL(""http://api.geonames.org/earthquakesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&username=demo""); try{ JSONArray earthquakes = json.getJSONArray(""earthquakes""); for(int i=0;i<earthquakes.length();i++){ HashMap<String String> map = new HashMap<String String>(); JSONObject e = earthquakes.getJSONObject(i); map.put(""id"" String.valueOf(i)); map.put(""name""Earthquake name:"" + e.getString(""eqid"")); map.put(""magnitude""Magnitude: "" + e.getString(""magnitude"")); mylist.add(map); } }catch(JSONException e) { Log.e(""log_tag""Error parsing data ""+e.toString()); } ListAdapter adapter = new SimpleAdapter(this mylist R.layout.main new String[] { ""name""magnitude"" } new int[] { R.id.item_title R.id.item_subtitle }); setListAdapter(adapter); final ListView lv = getListView(); lv.setTextFilterEnabled(true); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent View view int position long id) { @SuppressWarnings(""unchecked"") HashMap<String String> o = (HashMap<String String>) lv.getItemAtPosition(position); Toast.makeText(Main.thisID '"" + o.get(""id"") + ""' was clicked."" Toast.LENGTH_SHORT).show(); } }); }}
解决方案
LazyAdapter 里面的getItem()方法的具体内容贴出, 看了你的代码觉得是Adapter里面有问题 而且有可能是getItem(int position)方法有问题
时间: 2024-09-04 01:48:43