android转发json数据到listview的另一个类

时间:2012-12-06 14:21:56

标签: android json listview

我使用JSON从mysql表中解析数据,使用“id”和“firstname”行,并使用“firstname”行填充listview并使其正常工作。但是,我想添加onListItemClick,当用户点击listview上的某个名称时,该名称的“id”值应转发给另一个类。这就是我填充listview的方式:

            JSONArray jArray = new JSONArray(result);
            JSONObject json_data = null;
            for (int i = 0; i < jArray.length(); i++) {
                json_data = jArray.getJSONObject(i);
                r.add(json_data.getString("firstname"));

            }

            dataAdapter = new ArrayAdapter<String>(Persons.this,
                    R.layout.person_row, r);
            ListView lv = (ListView) findViewById(android.R.id.list);
            lv.setAdapter(dataAdapter); 

我可以将“firstname”转发给其他类:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Object o = this.getListAdapter().getItem(position);
    String FirstName = o.toString();
    Intent i = new Intent(this, PersonDetails.class);
    Bundle bandl = new Bundle();
    bandl.putString("fn", FirstName);
    i.putExtras(bandl);
    startActivity(i);

}

但问题是我想在listview上显示“firstname”而onClick只将“id”转发给其他类,我无法弄明白。转发“firstname”到其他类,然后转发其他mysql数据工作正常,直到我有两个同名的人,所以这就是为什么我需要转发行“id”......

3 个答案:

答案 0 :(得分:1)

简单的短工作答案

JsonArray

中访问您onListItemClick的{​​{1}}。

所以你可以做以下

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    String id = jArray. getJSONObject(position).getString("id");
    Intent i = new Intent(this, PersonDetails.class);
    Bundle bandl = new Bundle();
    bandl.putString("id",id);
    i.putExtras(bandl);
    startActivity(i);

}

请注意,您应该通过将适配器更改为可以同时包含ID和名称的内容来使其更好。所以你不需要保持对JsonArray对象的引用。这是tutorial给你的。

答案 1 :(得分:1)

最简单的方法是创建一个具有2个属性的自定义类CustomPerson:id和firstName。在CustomPerson中重写toString以返回firstName。

ArrayAdapter创建:

// list should be a List<CustomPerson> and should be filled with your data
dataAdapter = new ArrayAdapter<CustomPerson>(Persons.this, R.layout.person_row, list);

OnListItemClick实现|:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    CustomPerson o = (CustomPerson) this.getListAdapter().getItem(position);
    long id = o.getId();
    // DO SOMETHING WITH the person's id

}

答案 2 :(得分:0)

我设法使用此代码使其工作:

            lv.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    try {

                        String ajdi = jArray.getJSONObject(position).getString("id").toString();
                        Intent i = new Intent(Persons.this, PersonDetails.class);
                        Bundle bandl = new Bundle();
                        bandl.putString("id", ajdi);
                        i.putExtras(bandl);
                        startActivity(i);

                    } catch (JSONException e) {
                        ;
                    }
                }

            });

再次感谢你们两个人!