在android中的适配器的getView方法中单击事件

时间:2013-09-02 05:02:27

标签: android android-imageview onclicklistener baseadapter

我有一个问题。

不会在适配器的getView方法中调用图像视图的click事件。我很困惑,为什么会这样。我的代码似乎没问题。

以下是我的代码:

//---returns an ImageView view---
public View getView(int position, View convertView, ViewGroup parent)
{
    ImageView imageView = null;

    if (convertView == null) {
        imageView = new ImageView(act);
        imageView.setLayoutParams(new GridView.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

        imageView.setTag(position);

    } else {
        imageView = (ImageView) convertView;
    }

    if((Integer)imageView.getTag() == 0) {
        imageView.setLayoutParams(new GridView.LayoutParams(200, 200));
        imageView.setPadding(10, 5, 10, 5);
        Bitmap bitmap = ThumbnailUtils.extractThumbnail(imgPic.get(position).getBitmap(), 200, 200);
        imageView.setImageBitmap(bitmap);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

    }

    imageView.setOnClickListener(new OnClickListener()
    {

        @Override
        public void onClick(View v)
        {
            //TODO Auto-generated method stub
            if((Integer)v.getTag() != 0) {

                //opens the image to view.
                                    //Intent

            }
        }
    });
}

注意:我有一个网格视图。网格视图中的第一项是始终存在的摄像机图像。单击此按钮将打开相机。捕获图像后,它们应与此摄像机图像对齐。

因此,arraylist有一个相机的位图图像,然后是捕获图像的文件路径。

3 个答案:

答案 0 :(得分:1)

这样做

public View getView(int position, View convertView, ViewGroup parent)
{
    ImageView imageView = null;

    if ((convertView == null) || (convertView.getTag() == null)) {
        imageView = new ImageView(act);
        imageView.setLayoutParams(new GridView.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

        imageView.setTag(position);

    } else {
        imageView = (ImageView) convertView.getTag();
    }
     convertView.setTag(imageView);
    imageView.setOnClickListener(new OnClickListener()
    {

        @Override
        public void onClick(View v)
        {
            //TODO Auto-generated method stub
            if((Integer)v.getTag() != 0) {

                //opens the image to view.
                                    //Intent

            }
        }
    });
}

答案 1 :(得分:0)

您明确需要使图像视图可点击。 imageView.setClickable(真);

或者如果要捕获行单击事件,则创建OnItemClickListener的子类并将其附加到listview,但在这种情况下不要使listview项可单击。

答案 2 :(得分:0)

这似乎是一个非常奇怪的问题。但我用另一种方法解决了这个问题。

所以对于那些面临这个奇怪问题的人来说,

一种替代方法可以是实现onItemClickListener。

grid.setOnItemClickListener(new OnItemClickListener()
{

        @Override
        public void onItemClick(AdapterView<?> adapter_view, View view, int position,
                long id)
        {
                 if(position == 0) 
                 {
                    //your code
                 }
        }
});

如果在getView方法中创建的imageview是setOnFocusable(false)