我有一个片段,其网格视图最多可显示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);
}
}
答案 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);
}
});