内部类中的非final变量

Nic*_*son 4 java android

我尝试动态创建一个ImageView,我想将此imageView作为参数传递给侦听器中的方法.

            ImageView imageView1 = new ImageView(LookActivity.this);

            imageView1.setOnTouchListener(new OnTouchListener() {

                    @Override
                    public boolean onTouch(View arg0, MotionEvent arg1) {
                        detectLocationAndShowPopUp(imageView1);
                        return true;
                    }
                })
Run Code Online (Sandbox Code Playgroud)

但我正在采取以下错误:
不能在不同方法中定义的内部类中引用非最终变量imageView1.

我不想将imageView声明为final.我怎样才能克服这个问题?

Ema*_*lin 9

您可以制作imageView1的副本,然后在侦听器中使用该副本:

ImageView imageView1 = new ImageView(LookActivity.this);
final ImageView imageView2 = imageView1;

imageView1.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {
        detectLocationAndShowPopUp(imageView2);
        return true;
    }
});
Run Code Online (Sandbox Code Playgroud)

Sam发表评论后,我将我的代码更改为:

ImageView imageView1 = new ImageView(LookActivity.this);

imageView1.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent event) {
        detectLocationAndShowPopUp((ImageView) view);
        return true;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的一般答案.但对于那些不了解Android的人来说,`arg0`是对`imageView1`的引用,如果需要,只需将其转换为ImageView. (2认同)