为动态GirdView / ListView实现OnItemClickListener()

时间:2012-06-02 07:18:24

标签: android listview gridview onitemclicklistener

GridView适配器从布局创建ImageView。 所有图像都从URLs方面下载到数据库item IDs,其中ID来自JSONArray。 让我们说,视图现在显示的项目 ID: 1,3,4,7。 由于GridView项是动态的,因此位置(从0开始)无法在GridView上真正识别我的项目。 有没有其他方法可以从数据库项ID中识别该图像?

public OnItemClickListener ClickListner = new OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        //Toast.makeText(getApplicationContext(), 
        //      ""+position, Toast.LENGTH_SHORT).show();

        //Identification code for the item to be added here

        Intent view = 
                new Intent(main.this, View.class);
        view.putExtra("ID", id); 
        //expected to have an ID equal to database item ID
        startActivity(view);
    }

};

2 个答案:

答案 0 :(得分:6)

第一个选项(好方法)

您保留对适配器的引用(或者通过调用parent.getAdapter()获取它然后投射它)

在您的适配器中,请确保您已覆盖getItem(position)以返回用于填充适配器的对象(如果您使用BaseAdapter,则可能类似于return arrayList.getItem(position)

在您调用getItem(position)的适配器上,这将为您提供完全相同的对象,因此您应该拥有现在需要的所有信息

第二个选项(简单易用)

您可以使用setTag()将信息放入gridviewitem的视图中 然后在onItemClick中,您拨打getTag()并在那里拥有您唯一的ID

答案 1 :(得分:1)

您可以使用POJO类在该类中设置Image的URL和ID,并为其创建和ArrayList并将其传递给Adapter类。通过这样做,您将绑定ImageView和数据库中的ImageID。然后,在onItemClick()内,你可以简单地使用

 POJO pojo = listview.getAdapter().getitem(position);
 int id = pojo.getId();