我使用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”......
答案 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) {
;
}
}
});
再次感谢你们两个人!