0

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

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

我可以将“名字”转发给其他班级:

@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 和 onClick 上显示“名字”以仅将“id”转发给其他类,我无法弄清楚。将“名字”转发到其他类,然后检索其他 mysql 数据工作正常,直到我得到两个同名的人,所以这就是为什么我需要转发行“id”......

4

3 回答 3

1

给你的简单简短的工作答案

保持一个参考JsonArray ,你可以在哪里访问它onListItemClick

所以您可以执行以下操作

@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 对象的引用。这是给你的教程

于 2012-12-06T14:36:40.250 回答
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

}
于 2012-12-06T14:37:46.583 回答
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) {
                        ;
                    }
                }

            });

再次感谢你们两位!

于 2012-12-07T06:47:26.373 回答