2013-05-19 124 views
0

我有一种情况在这里,我想通过在列表项单击所需的JSON对象在我下面的活动传递JSON对象列表项其他活动点击

activity alldeals

假设当我点击deal 2应该将jArray的第2个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

你可以从JsonArray根据ListView项通过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当循环执行结束

+0

GR8感谢名单...它的工作 –

0

如果你希望它是更灵活的,它总是包含最后的JSONObject从JSONArray,你可以把你在ArrayListget()你想要的数据传递的JSON数据自动传递取决于单击的项目,像这样:

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

      }); 
+0

:我觉得你ρяσѕρєяķ误解了我的问题的答案就是我想要的......但不管怎么说感谢关注 –

+0

是啊,有点误会,所以我更新了我回答。没问题。 :) – Krauxe

0

我知道为时已晚发布此的answere但你的问题是排名在谷歌搜索引擎第一的位置,所以如果有人还没有找到解决办法,然后可能是我的answere帮助他们。 对JSON数据传递到另一个活动根据列表视图位置:

OnItemClick需要复制这个代码执行此内:

的JSONObject的SelectedItem =(yourjsonresponse).getJsonObject(位置);

和JSONArray相同。

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

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

谢谢

相关问题