2012-03-03 12 views
11
JavaのAndroidアプリケーションの

内部の匿名クラスから外部クラスの変数にアクセスするにはどうすればよいですか? 例:Javaの外部クラスのアクセス変数

ProgressDialog dialog = new ProgressDialog(this); 
    ..... 
    send.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) { 

      //here i'd like to do something with **dialog** variable 
      ....... 

     } 
    }); 

答えて

19

ダイアログ変数は、外部クラスのフィールドである場合は、外側のクラス名(a qualified this)が付いthis使用することができます。dialiog変数がある場合、代わりに

send.setOnClickListener(new View.OnClickListener() 
{ 
    public void onClick(View v) { 
     ProgressDialog dlg = OuterClass.this.dialog; 
     ....... 
    } 
}); 

をそれは最終的としてマークされる必要があり、ローカル変数:

final ProgressDialog dialog = new ProgressDialog(this); 
..... 
send.setOnClickListener(new View.OnClickListener() 
{ 
    public void onClick(View v) { 
     // The dialog variable is in scope here ... 
     dialog.someMethod(); 
    } 
}); 
+0

これは、 'dialog'が外部クラスのフィールドである場合の正解です。私はこの場合、内部クラスの周りのメソッドのローカル変数だと思います。 –

5

外のローカル変数(dialog)を作りますfinalだから、あなたはそれを内部クラスから参照することができます。

1

ローカル変数(シグネチャが示唆しているような)の場合、内部クラスがアクセスできるようにするにはfinalである必要があります。メンバー変数の場合、可視性修飾子はデフォルト(修飾子なし)またはそれ以上(保護または公開)にする必要があります。 private -modifierでは、(あなたのコンパイラの設定によっては)それはまだ動作しますが、あなたは警告を受け取ることがあります。

囲むフィールドSomeClass.someFieldへ

読み取りアクセスが 合成アクセサメソッドによってエミュレートされ

+1

メンバー変数に関する部分が真ではありません。内部クラスは、囲むクラスのプライベートメンバーにアクセスすることができます - コンパイラは、そのようなメンバーのための隠しアクセサーを生成します。 – casablanca

+0

@casablanca:true、答えを編集しました – esaj

関連する問題