2012-04-26 6 views
1
boolean buttonflag=false; 
     Editbutton.setOnClickListener(new OnClickListener() 
     { 


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

      } 
     } 

エラー「は、異なる方法で定義されたインナークラス内の非最終変数buttonflagを参照できません」「別の方法で定義されたインナークラス内の非最終変数buttonflagを参照できません」私がしたいのは、私がEditボタンを押したときです。私はbuttonflagをtrueにします。この問題の理由と修正を説明することができますか?は、IM取得が

+1

フィールドを作成しない限り、Javaではこれをサポートしていません。 – SLaks

+0

これの理由を理解するために、この[私の答え](http://stackoverflow.com/questions/9965364/scope-of-the-mouse-adapter/9965799#9965799)を通過しようとすると、私は願っています助けることができる –

答えて

3

エラーメッセージはかなり簡単です。 buttonflagは最終的なものではないため、OnClickListener匿名クラスでアクセスすることはできません。 2つの解決策

  1. メイクbuttonflagフィールド
  2. それが最終確認します。しかし、その後、あなたはそれを変更することはできません、あなたは、このケースでは

    final boolean[] buttonflag=new boolean[]{false}; 
    Editbutton.setOnClickListener(new OnClickListener(){ 
        @Override 
        public void onClick(View v){ 
        buttonflag[0]=true; 
        } 
    } 
    
1

結果として一次元配列のアプローチを選択する必要が、あなたはそれフィールドにする必要があります。もう一方の@Robinはあなたの問題を解決する2つの方法を正しく示していますが、これは複数回呼び出されるコールバックメカニズムです(ボタンのコールバックです)。ローカル変数はほとんど使われません。メソッドが呼び出される前にスコープから外れる可能性があります。

設定されている値は、コードの他の部分からアクセスできなくなるため、目的が達成されません。私は、ボタンが押されたときに何らかの状態を設定しようとしていると仮定します。したがって、その状態を、表示されたコードを含むメソッドが終了したときにアクセス可能なフィールドとして保存する必要があります。

関連する問題