如何为 RecyclerView 适配器中动态生成的 ImageViews 设置 Onclick
How to set Onclick for ImageViews generated dynamically in Adapter for RecyclerView
ImageView 是为每个 RecyclerView 项目生成的,每个项目都有不同数量的 ImageView。我已经生成了 ImageView,但现在我必须为每个项目 中生成的每个图像设置 OnClick。我不知道该怎么做。任何帮助将不胜感激。
ImageView 在适配器中生成代码:
@Override
public void onBindViewHolder(ListHolder holder, final int position) {
holder.name.setText(names[position]);
// BELOW CODE IS THERE TO DYNAMICALLY ADD IMAGES
LinearLayout ll = new LinearLayout(c);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
ll.setLayoutParams(params);
for(int i=0;i<num[position];i++)
{
holder.image = new ImageView(c);
holder.image.setLayoutParams(new ViewGroup.LayoutParams(200,
200));
holder.image.setImageResource(R.mipmap.ic_launcher);
ll.addView(holder.image);
}
holder.horizontalScrollView.addView(ll);
}
以上代码在适配器内部,如果您需要,我将非常乐意为您提供所有代码。请告诉我如何处理生成的这些图像的点击事件。谢谢
您可以简单地在 holder.image
对象上执行此操作。这是一个基于您的代码的示例:
for(int i=0;i<num[position];i++)
{
holder.image = new ImageView(c);
holder.image.setLayoutParams(new ViewGroup.LayoutParams(200,
200));
holder.image.setImageResource(R.mipmap.ic_launcher);
//setting the onClickListener to image
holder.image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//image clicked, do stuff
}
});
ll.addView(holder.image);
}
希望对您有所帮助。试试看,让我知道。
@Override
public void onBindViewHolder(ListHolder holder, final int position) {
holder.name.setText(names[position]);
// BELOW CODE IS THERE TO DYNAMICALLY ADD IMAGES
LinearLayout ll = new LinearLayout(c);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
ll.setLayoutParams(params);
for(int i=0;i<num[position];i++)
{
ImageView img = new ImageView(c);
img.setLayoutParams(new ViewGroup.LayoutParams(200,
200));
img.setImageResource(R.mipmap.ic_launcher);
img.setId(i);
ll.addView(img);
img.setOnClickListner(OnClickListener() {
@Override
public void onClick(View v) {
}
}));
}
holder.horizontalScrollView.addView(ll);
}
ImageView 是为每个 RecyclerView 项目生成的,每个项目都有不同数量的 ImageView。我已经生成了 ImageView,但现在我必须为每个项目 中生成的每个图像设置 OnClick。我不知道该怎么做。任何帮助将不胜感激。
ImageView 在适配器中生成代码:
@Override
public void onBindViewHolder(ListHolder holder, final int position) {
holder.name.setText(names[position]);
// BELOW CODE IS THERE TO DYNAMICALLY ADD IMAGES
LinearLayout ll = new LinearLayout(c);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
ll.setLayoutParams(params);
for(int i=0;i<num[position];i++)
{
holder.image = new ImageView(c);
holder.image.setLayoutParams(new ViewGroup.LayoutParams(200,
200));
holder.image.setImageResource(R.mipmap.ic_launcher);
ll.addView(holder.image);
}
holder.horizontalScrollView.addView(ll);
}
以上代码在适配器内部,如果您需要,我将非常乐意为您提供所有代码。请告诉我如何处理生成的这些图像的点击事件。谢谢
您可以简单地在 holder.image
对象上执行此操作。这是一个基于您的代码的示例:
for(int i=0;i<num[position];i++)
{
holder.image = new ImageView(c);
holder.image.setLayoutParams(new ViewGroup.LayoutParams(200,
200));
holder.image.setImageResource(R.mipmap.ic_launcher);
//setting the onClickListener to image
holder.image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//image clicked, do stuff
}
});
ll.addView(holder.image);
}
希望对您有所帮助。试试看,让我知道。
@Override
public void onBindViewHolder(ListHolder holder, final int position) {
holder.name.setText(names[position]);
// BELOW CODE IS THERE TO DYNAMICALLY ADD IMAGES
LinearLayout ll = new LinearLayout(c);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
ll.setLayoutParams(params);
for(int i=0;i<num[position];i++)
{
ImageView img = new ImageView(c);
img.setLayoutParams(new ViewGroup.LayoutParams(200,
200));
img.setImageResource(R.mipmap.ic_launcher);
img.setId(i);
ll.addView(img);
img.setOnClickListner(OnClickListener() {
@Override
public void onClick(View v) {
}
}));
}
holder.horizontalScrollView.addView(ll);
}