【问题标题】:How to set Onclick for ImageViews generated dynamically in Adapter for RecyclerView如何为 RecyclerView 的 Adapter 中动态生成的 ImageView 设置 Onclick
【发布时间】:2016-05-30 09:50:44
【问题描述】:

ImageView 是为每个 RecyclerView 项目生成的,每个项目都有不同数量的 ImageView。我已经生成了 ImageViews,但现在我必须为每个项目中生成的每个图像设置 OnClick。我不知道该怎么做。任何帮助将不胜感激。

ImageView在Adapter中生成代码:

 @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 上以相同的方式添加 onClickListener
  • @programmingandroid 你试过通用的吗,因为我会工作
  • @Nisarg 但是我如何为同一个列表中的不同图像添加不同的点击?
  • @programmingandroid 检查那个位置
  • 只需将 clicklistener 添加到循环中的每个项目。 ** holder.image.setOnClickListener(new View.OnClickListener(){public void onClick(View v) { // 做你想做的 } }**

标签: android onclick imageview android-adapter android-recyclerview


【解决方案1】:

您可以简单地在 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);
    }

我希望这会有所帮助。试试看,然后告诉我。

【讨论】:

  • 使用这种方法,我将如何获取图像的资源和图像所在列表的名称[pos]?
【解决方案2】:
 @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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 2019-12-04
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多