【问题标题】:click event in the getView method of adapter in androidandroid中适配器的getView方法中的click事件
【发布时间】:2013-09-02 05:02:27
【问题描述】:

我有问题。

图像视图的点击事件没有在适配器的getView方法中被调用。我很困惑为什么会这样。代码对我来说似乎没问题。

以下是我的代码:

//---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有一个相机的位图图像,然后是捕获图像的文件路径。

【问题讨论】:

  • 你在哪里将你的 imageView 添加到父级?
  • 你是否也在那个特定的 listView 上实现了 onItemClickListener...?
  • @user2045570:我正在将此适配器添加到 Gridview。实际上我正在捕获图像,然后在网格视图中设置捕获的图像。然后为了打开图片(从gridview),点击事件在imageview上
  • @Faizan:当我可以在网格视图中拥有 imageview 的 clicklistener 时,需要实现 onItemClickListener 吗
  • 是的,不需要......只要确保如果你实现 onItemClickListener..那么在适配器中定义的 onClicklister 永远不会被调用。

标签: android android-imageview onclicklistener baseadapter


【解决方案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

            }
        }
    });
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      另一种方法是实现 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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多