我正在尝试将listview
中点击的项目的ID传递给下一个活动,但每当我点击该项目时,它始终会获得listview
中最后一项的ID我的代码
String src = a.getText().toString();
ListView srceve = (ListView)findViewById(R.id.list_scr_planner);
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
if(src.length()>0)
try{
HttpGet post=new HttpGet("xxxxxxxxxxxxxxxxxxxxxxxxxxxx");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("eventname", src));
HttpResponse resp = login.client.execute(post);
String re = EntityUtils.toString(resp.getEntity());
Log.i("loggg", "error" + re);
re= "{\"root\": " + re + "}";
JSONObject root = new JSONObject(re);
JSONArray sessions = root.getJSONArray("root");
Log.i("loggg", "error" + sessions);
for(int i=0;i<sessions.length();i++){
HashMap<String, String> map2 = new HashMap<String, String>();
JSONObject e = sessions.getJSONObject(i);
map2.put("event_name", e.getString("name"));
map2.put("event_date", e.getString("eventdate"));
mylist.add(map2);
id = e.getString("id");
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SimpleAdapter adapt= new SimpleAdapter(searchevent.this,mylist, R.layout.list_custom ,new String[]{"event_name","event_date"},new int []{R.id.textnam,R.id.textdate});
srceve.setAdapter(adapt);
srceve.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View arg1,
int pos, long arg3) {
// TODO Auto-generated method stub
parent.getItemAtPosition(pos);
Toast.makeText(getApplicationContext(), ""+ id + evename, 0).show();
Intent i = new Intent(searchevent.this, eventDetails.class);
i.putExtra("ar", id);
startActivity(i);
}
});
请告诉我我错在哪里,我正在检索来自服务器的项目的ID。感谢
答案 0 :(得分:2)
在循环中:
for(int i=0;i<sessions.length();i++){
HashMap<String, String> map2 = new HashMap<String, String>();
JSONObject e = sessions.getJSONObject(i);
map2.put("event_name", e.getString("name"));
map2.put("event_date", e.getString("eventdate"));
mylist.add(map2);
id = e.getString("id");
}
每当你覆盖id
的值时,这就是为什么它总是最后的......你应该把它保存在像......这样的数组中。
String[] ids = new String[sessions.length()];
for(int i=0;i<sessions.length();i++){
HashMap<String, String> map2 = new HashMap<String, String>();
JSONObject e = sessions.getJSONObject(i);
map2.put("event_name", e.getString("name"));
map2.put("event_date", e.getString("eventdate"));
mylist.add(map2);
ids[i] = e.getString("id");
}
然后在onItemClick
中,根据所选项目的位置获取它:
public void onItemClick(AdapterView<?> parent, View arg1,
int pos, long arg3) {
// TODO Auto-generated method stub
parent.getItemAtPosition(pos);
String id = ids[pos];
Toast.makeText(getApplicationContext(), ""+ id + evename, 0).show();
Intent i = new Intent(searchevent.this, eventDetails.class);
i.putExtra("ar", id);
startActivity(i);
}
答案 1 :(得分:0)
srceve.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View arg1,
int pos, long arg3) {
// TODO Auto-generated method stub
String id=parent.getId();//this will give you the id of the selected item View
parent.getItemAtPosition(pos);
Toast.makeText(getApplicationContext(), ""+ id + evename, 0).show();
Intent i = new Intent(searchevent.this, eventDetails.class);
i.putExtra("ar", id);
startActivity(i);
}
});