如果我的列表视图是由JSON对象在单击时创建的,如何将id传递给其他活动

时间:2016-07-18 05:50:43

标签: android json android-studio

我创建一个列表视图,使用json从服务器检索数据并在列表视图中显示信息,我尝试检查id是否通过单击列表将成功传递到适配器将显示一个快餐栏,但我不知道如何将id传递给列表视图。这是我的代码。

@Override
protected void onPostExecute(Integer integer) {
    super.onPostExecute(integer);

    if(integer == 1)
    {
        //ADAPTER
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(c,android.R.layout.simple_list_item_1,players);

        //ADAPT TO LISTVIEW
        lv.setAdapter(adapter);

        //LISTENET
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Snackbar.make(view,players.get(position),Snackbar.LENGTH_SHORT).show();
            }
        });

    }else
    {
        Toast.makeText(c,"Unable to Parse",Toast.LENGTH_SHORT).show();
    }

    pd.dismiss();
}

//PARSE RECEIVED DATA
private int parse()
{
    try
    {
        //ADD THAT DATA TO JSON ARRAY FIRST
        JSONArray ja=new JSONArray(data);

        //CREATE JO OBJ TO HOLD A SINGLE ITEM
        JSONObject jo=null;

        players.clear();

        //LOOP THRU ARRAY
        for(int i=0;i<ja.length();i++)
        {
            jo=ja.getJSONObject(i);

            //RETRIOEVE NAME
            String name=jo.getString("campaign_name");
            String id=jo.getString("campaign_id");

            //ADD IT TO OUR ARRAYLIST
            players.add(name);
        }

        return 1;

    } catch (JSONException e) {
        e.printStackTrace();
    }

    return 0;
}

这是输出

enter image description here

2 个答案:

答案 0 :(得分:2)

使用字段名称 ID 创建模型类广告系列,并覆盖 toString 以返回您想要的内容显示在列表视图中(在您的案例名称中)

传递Campaign列表而不是适配器中的字符串列表

ArrayAdapter<Campaign> adapter=new ArrayAdapter<Campaign>(..)`

在解析方法中,

Campaign campaign = new Campaign()
campaign.name=jo.getString("campaign_name");
campaign.id=jo.getString("campaign_id");
players.add(campaign);`

最后,onItemclick

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Campaign item =     parent.getAdapter().getItem(position)
Snackbar.make(view,item.id +" "+item.name,Snackbar.LENGTH_SHORT).show();
}

答案 1 :(得分:1)

players创建的campaign_name ArrayList相同,为campaign_id再创建一个ArrayList,添加商店中的所有id。

onItemClick方法中,使用campaign_id ArrayList作为已点击项目的ID:

1。创建一个ArrayList:

ArrayList<Integer> arrCampaignID=new ArrayList<Integer>();

1。parse()更改为:

       String id=jo.getString("campaign_id");

        //ADD IT TO OUR ARRAYLIST
        players.add(name);
        arrCampaignID.add(id);

2。onItemClick中使用arrCampaignID获取所选的广告系列ID:

@Override
 public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
       String str_compaign_id=  arrCampaignID.get(position);        
 }

注意,您也可以通过创建具有name和id属性的自定义类对象来执行此操作,但在这种情况下,您需要通过扩展ArrayAdapter来创建自定义适配器。