单击网格中的第一个图像时,Android OnClickListener不会被触发

时间:2016-11-10 06:42:40

标签: android gridview imageview

我有一个片段,其网格视图最多可显示5个图像。对于网格中的第一个图像,OnClickListener不会被触发,但是当点击网格中的其他图像时它会起作用。

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {
        imageView = new ImageView(_activity);
    } else {
        imageView = (ImageView) convertView;
    }

    String imageURLs = _filePaths.get(position).toString();
    Picasso.with(this._activity).load(imageURLs).placeholder(R.mipmap.ic_launcher).into(imageView);

    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setLayoutParams(new GridView.LayoutParams(imageWidth,
            imageWidth));

    imageView.setOnClickListener(new OnImageClickListener(position));

    return imageView;
}

class OnImageClickListener implements OnClickListener {

    int _postion;

    // constructor
    public OnImageClickListener(int position) {
        this._postion = position;
    }

    @Override
    public void onClick(View v) {
        Intent i = new Intent(_activity, FullScreenViewActivity.class);
        i.putExtra("position", _postion);
        i.putExtra("PATHS", _filePaths);
        _activity.startActivity(i);
    }

}

2 个答案:

答案 0 :(得分:0)

您应该尝试将此位置设置为ImageView方法中getView()的标记,并在onClick()方法中获取其标记(位置)。

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {
        imageView = new ImageView(_activity);
    } else {
        imageView = (ImageView) convertView;
    }

    String imageURLs = _filePaths.get(position).toString();
    Picasso.with(this._activity).load(imageURLs).placeholder(R.mipmap.ic_launcher).into(imageView);

    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setLayoutParams(new GridView.LayoutParams(imageWidth,
            imageWidth));

    imageView.setTag(position);
    imageView.setOnClickListener(this);

    return imageView;
}

  @Override
public void onClick(View v) {
    Intent i = new Intent(_activity, FullScreenViewActivity.class);
    i.putExtra("position", v.getTag()+"");
    i.putExtra("PATHS", _filePaths);
    _activity.startActivity(i);
    }

}

另外,不要忘记实施View.OnClickListener

答案 1 :(得分:0)

通过将OnItemClick直接附加到gridView而不是imageView来解决问题。

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent i = new Intent(view.getContext(), FullScreenViewActivity.class);
            i.putExtra("position", position);
            i.putExtra("PATHS", imagePaths);
            view.getContext().startActivity(i);
        }
    });