1
boolean buttonflag=false;
        Editbutton.setOnClickListener( new OnClickListener()
        { 


            @Override
            public void onClick( View v )
            {
               buttonflag=true;

             }
        }

我得到的错误是“不能引用以不同方法定义的内部类中的非最终变量buttonflag”我想要做的是当我按下Editbutton时我希望buttonflag为真..任何人都可以解释原因并解决此问题?

4

2 回答 2

3

The error message is pretty straight forward. Since buttonflag is not final, you cannot access it in your OnClickListener anonymous class. Two possible solutions

  1. Make buttonflag a field
  2. Make it final. However, then you cannot modify it, and you have to choose the one-dimensional array approach resulting in

    final boolean[] buttonflag=new boolean[]{false};
    Editbutton.setOnClickListener( new OnClickListener(){ 
       @Override
       public void onClick( View v ){
         buttonflag[0]=true;
       }
    }
    
于 2012-04-26T18:35:14.930 回答
1

对于这种情况,您必须将其设为字段。另一个@Robin 正确地向您展示了解决问题的两种方法,但是由于这是一个会被多次调用的回调机制(毕竟它是一个按钮上的回调),因此局部变量几乎没有用,因为它会可能在调用方法之前超出范围。

即使它不会失败,因为设置的值不再可以被代码的任何其他部分访问,它也没有什么用处。我假设您正在尝试在按下按钮时设置某些状态,因此需要将该状态存储为一个字段,以便在包含所示代码的方法结束时可以访问。

于 2012-04-26T19:14:55.387 回答