首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onClickListener ListView

onClickListener ListView
EN

Stack Overflow用户
提问于 2014-04-05 06:49:40
回答 3查看 95关注 0票数 1

我的Contacts活动中有一个联系人列表,该列表是通过此方法填充的:

代码语言:javascript
复制
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);
    }
}

当我执行这行代码时:

代码语言:javascript
复制
adapter.add(toIterate.getJSONObject(i).get("name").toString());

我想在每个项目上和它里面设置一个onClickListener,意在另一个具有额外toIterate.getJSONObject(i).toString()的活动。

我如何才能做到这一点?

EN

回答 3

Stack Overflow用户

发布于 2014-04-05 06:57:41

尝尝这个

代码语言:javascript
复制
 @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
          //Do something when an item is clicked 
}
票数 1
EN

Stack Overflow用户

发布于 2014-04-05 07:11:07

您可以将JSONObject-s存储在ArrayAdapter中,并在以后检索它们。

所以你的代码变成了

代码语言:javascript
复制
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

代码语言:javascript
复制
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;
}

}

票数 1
EN

Stack Overflow用户

发布于 2014-04-05 07:26:25

我必须创建一个名为contacts (接收JSONArray)的静态属性。使用该属性和position参数完成。

谢谢。

代码语言:javascript
复制
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();
        }
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22874283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档