0

我在这里有一个场景,我想在列表项上传递所需的 json 对象,单击下面的活动

活动全部优惠

假设当我单击deal 2jArray 中的第二个 json 对象时,应该将其传递给意图,并且我的下一个活动必须得到它。

但这里的问题是,当我单击任何列表项时,下一个活动会在最后一个索引处接收 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 对象时将被传递给意图

4

3 回答 3

3

您可以JsonObject根据 ListView 项目单击的位置从 JsonArray 传递为:

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

    }); 

当前,当 for 循环执行结束时,您传递json_data的始终包含 JSONArray 中的最后一个 JSONObject

于 2013-05-19T06:42:48.607 回答
0

如果您希望它更灵活,您可以将您将传递的 JSON 数据放入 an 中ArrayList,并get()根据单击的项目自动传递您想要传递的数据,如下所示:

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

            });
于 2013-05-19T06:43:07.080 回答
0

我知道发布此答案为时已晚,但您的问题在谷歌搜索引擎中排名第一,所以如果有人没有找到解决方案,那么可能是我的答案帮助他们。根据 Listview 位置将 json 数据传递给另一个活动:

在 OnItemClick 中执行此操作,您需要复制以下代码:

JSONObject SelectedItem=(yourjsonresponse).getJsonObject(position);

和 JSONArray 一样。

然后在您的 Intent 中传递 SelectedItem.toString。

注意:yourjsonresponse 是您的主要 API 响应,可以是 jsonobject 或 jsonarray。

谢谢

于 2015-11-17T14:07:08.463 回答