我有一个场景,我想在列表项目上传递所需的json对象,点击我的下面的活动
假设当我点击deal 2
jArray中的第二个json对象应该传递给intent并且我的下一个活动必须得到它。
但问题是当我点击任何列表项时,下一个活动会在最后一个索引接收json对象。
这是来自alldeals.java的代码
try{
jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++){
json_data = jArray.getJSONObject(i);
Log.i("log_tag","dealid: "+json_data.getString("deal_id")+
", hotel name: "+json_data.getString("hotel_name")+
", location: "+json_data.getString("location")+
", website: "+json_data.getString("website")
);
}
json_data=new JSONObject();
String[] data=new String[jArray.length()];
planetList = new ArrayList<String>();
for(int i=0;i<jArray.length();i++)
{
json_data= jArray.getJSONObject(i);
data[i]=json_data.getString("deal_id");
Log.i("log_tag", "string "+data[i]);
planetList.addAll( Arrays.asList("Deal "+ (i+1)));
listAdapter = new ArrayAdapter<String>(this, R.layout.listrow, planetList);
runOnUiThread(new Runnable() {
public void run() {
list.setAdapter(listAdapter);
}
});
}
list.setOnItemClickListener(new OnItemClickListener() { //where to put this piece of code???
public void onItemClick(AdapterView<?> arg0, View arg1,
final int arg2, long arg3) {
Intent intent = new Intent(context,Finaldeal.class);
intent.putExtra("deal", json_data.toString());
startActivity(intent);
}
});
}
catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
我知道为了解决这个问题,我必须把我的list.setOnItemClickListener()
放在适当的位置,但我很困惑把它放在哪里,所以当我点击deal1
时,第一个json对象将被传递意图
答案 0 :(得分:3)
你可以根据ListView项目点击位置从JsonArray传递JsonObject
:
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1,
final int arg2, long arg3) {
if(!jArray.isNull(arg2)){
Intent intent = new Intent(context,Finaldeal.class);
intent.putExtra("deal", jArray.optJSONObject(arg2).toString());
startActivity(intent);
}
}
});
当前正在传递json_data
,当循环执行结束时,它始终包含来自JSONArray的最后一个JSONObject
答案 1 :(得分:0)
如果您希望它更灵活,您可以将要传递的JSON数据自动传递到ArrayList
和get()
,这取决于所点击的项目,如下所示:< / p>
ArrayList<String> jsonList = new ArrayList<String>();
jsonList.add(jsonDataForFirstListitem); // JSON data in String form
jsonList.add(jsonDataForSecondListitem);
// And so on...
然后,对于您的听众,您可以在定义列表后立即将其放好。
ListView list = (ListView) findViewById(R.id.myListView);
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapter, View view,
final int pos, long id) {
Intent intent = new Intent(context,Finaldeal.class);
String jsonData = jsonList.get(pos);
intent.putExtra("deal", jsonData);
startActivity(intent);
}
});
答案 2 :(得分:0)
我知道发布这个问题为时已晚,但您的问题是在谷歌搜索引擎中排名第一,所以如果有人找不到解决方案,那么我的回答可能会帮助他们。 用于根据Listview位置将json数据传递给另一个活动:
在OnItemClick中执行此操作,您需要复制此代码:
JSONObject SelectedItem =(yourjsonresponse).getJsonObject(position);
与JSONArray相同。
然后在你的Intent中传递SelectedItem.toString。
注意:yourjsonresponse是您的主API响应,可以是jsonobject或jsonarray。
谢谢