我的Contacts活动中有一个联系人列表,该列表是通过此方法填充的:
public void allyGetAllDelegate(HttpResponse response, JSONObject result)
{
if(result != null)
{
ListView listContacts = (ListView) this.listContactsView.findViewById(R.id.listContacts);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
JSONArray toIterate;
try {
toIterate = result.getJSONArray("data");
for(int i=0; i<toIterate.length(); i++)
{
adapter.add(toIterate.getJSONObject(i).get("name").toString());
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
listContacts.setAdapter(adapter);
}
}当我执行这行代码时:
adapter.add(toIterate.getJSONObject(i).get("name").toString());我想在每个项目上和它里面设置一个onClickListener,意在另一个具有额外toIterate.getJSONObject(i).toString()的活动。
我如何才能做到这一点?
发布于 2014-04-05 06:57:41
尝尝这个
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
//Do something when an item is clicked
}发布于 2014-04-05 07:11:07
您可以将JSONObject-s存储在ArrayAdapter中,并在以后检索它们。
所以你的代码变成了
public void allyGetAllDelegate(HttpResponse response, JSONObject result) {
if(result != null) {
ListView listContacts = (ListView) this.listContactsView.findViewById(R.id.listContacts);
final Mydapter adapter = new MyAdapter(this, android.R.layout.simple_list_item_1);
JSONArray toIterate;
try {
toIterate = result.getJSONArray("data");
for(int i=0; i<toIterate.length(); i++)
{
adapter.add(toIterate.getJSONObject(i));
}
} catch (JSONException e) {
// handle exceptions here
}
listContacts.setAdapter(adapter);
listContacts.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent i = new Intent(/*your intent*/);
i.putExtra("extra", adapter.getItem(position).toString());
startActivity(i);
}
});
}
}此外,您还必须扩展ArrayAdapter并覆盖它的getView
class MyAdapter extends ArrayAdapter<JSONObject> {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater li = LayoutInflater.from(getContext());
TextView tv = (TextView) li.inflate(android.R.layout.simple_list_item_1, null);
tv.setText(getItem(position).get("name"));
return tv;
}}
发布于 2014-04-05 07:26:25
我必须创建一个名为contacts (接收JSONArray)的静态属性。使用该属性和position参数完成。
谢谢。
listContacts.setAdapter(adapter);
listContacts.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
try {
Intent intent = new Intent(view.getContext(), ContactProfile.class);
intent.putExtra("person", Contacts.contacts.getJSONObject(position).toString());
startActivity(intent);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});https://stackoverflow.com/questions/22874283
复制相似问题