将JSON对象传递给列表项上的另一个活动单击

时间:2013-05-19 06:35:57

标签: android json android-intent

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

activity alldeals

假设当我点击deal 2 jArray中的第二个json对象应该传递给intent并且我的下一个活动必须得到它。

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

3 个答案:

答案 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数据自动传递到ArrayListget(),这取决于所点击的项目,如下所示:< / 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。

谢谢