如何将自定义参数传递给onClick侦听器

时间:2014-01-24 11:58:52

标签: android dynamic

我正在尝试实施这种情况:

  1. 我得到了我的照片
  2. 我将它们动态添加到ScrollView
  3. 对于每个Image,我添加了OnClick监听器,所以当我点击图像时,我会看到一个对话框,全屏显示图像(基本上就像是JQuery中的ThickBox)
  4. 我的代码:

        decodetByteFullSize = getImageFromApi();
        decodedByte=scaleToFitWidth(decodetByteFullSize, photoScroll.getWidth());
        String DESIREDTEXT = GetStringFromApi();
        ImageView resultImage = new ImageView(this);
            resultImage.setImageBitmap(decodedByte);
            resultImage.setPadding(0, 0, 0, 10);
            resultImage.setOnClickListener(new OnClickListener() {          
                @Override
                public void onClick(View v) {
                    Dialog imagePopup = new Dialog(MainActivity.this);
                    View view = getLayoutInflater().inflate(R.layout.image_layout, null);
                    TextView tv = (TextView) view.findViewById(R.id.tabsText);
                    tv.setText(DESIREDTEXT);
                    ImageView iv = (ImageView)view.findViewById(R.id.tabsImage);
                    iv.setImageBitmap(decodetByteFullSize);
                    imagePopup.setContentView(view);
                    imagePopup.show();
                }
            });
    
            photoScroll.addView(resultImage);
    

    问题 - 如何将DESIRED TEXTdecodetByteFullSize参数传递给onClick事件,因为它对每个图像来说都是动态的和不同的?

    提前致谢!

2 个答案:

答案 0 :(得分:2)

 final ImageView resultImage = new ImageView(this);
     resultImage.setTag(DESIRED TEXT);
        resultImage.setImageBitmap(decodedByte);
        resultImage.setPadding(0, 0, 0, 10);
        resultImage.setOnClickListener(new OnClickListener() {          
            @Override
            public void onClick(View v) {
                Dialog imagePopup = new Dialog(MainActivity.this);
                View view = getLayoutInflater().inflate(R.layout.image_layout, null);
                TextView tv = (TextView) view.findViewById(R.id.tabsText);
                tv.setText(resultImage.getTag());
                imagePopup.setContentView(view);
                imagePopup.show();
            }
        });

答案 1 :(得分:1)

对要在onClickListener中访问的变量使用关键字final。 如果你通过ScrollView实际上意味着ListView,你可能不希望每次都创建一个新的监听器,而是像Digvesh建议的那样将它放在标签中。

视图的标记可以用作地图,使用资源ID作为关键字:resultImage.setTag(R.id.text, GetStringFromApi());resultImage.setTag(R.id.image, decodeByteFull);。然后可以使用resultImage.getTag(R.id.text)& resultImage.getTag(R.id.image);

如果你有一个名为text&在xml中的某个位置,您不需要执行任何其他操作,但如果您需要用于此目的的唯一ID,则可以在res \ values目录中的ids.xml文件中创建ID:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item type="id" name="text" />
    <item type="id" name="image" />
</resources>