2012-04-05 17 views
0

newiconid[0]の値をに変更する方法onItemSelected()から変更する必要があります。そして私はonClick()にその値を使用する必要があります。次のコードは機能しません。newiconid[0]の値は0のままです。これを達成する方法は?あなたはそれFINAL作ったオブジェクトの値を内部メソッドから変更するにはどうすればよいですか?

@Override 
public void onClick(DialogInterface dialog, 
     int which) { 
    final int newiconid[] = new int[1]; 
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(
       AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      // TODO Auto-generated method stub 
      System.out.println("" + arg1 + arg2 
        + arg3); 
      newiconid[0] = arg2; 
     } 

     @Override 
     public void onNothingSelected(
       AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 
    // TODO Auto-generated method stub 
    System.out.println("updateicon "+newiconid[0]+" "+itemid); 
    datasource.updateVSIcon(newiconid[0], itemid); 
} 

答えて

2

代わりにnewiconidをクラスメンバにすることはできますか?両方のスコープでアクセス可能でなければなりません。そして、はい、@ Agent404が言ったように、final

+0

これはうまくいきました。どのようにしてクラスメンバーにアクセスし、内部のメソッドから変更することができますか? –

+1

それは内部クラスの全体のポイントです。彼らは彼らの囲むクラスと特別な関係を持っています。 – emory

+1

@BinoyBabu私は思う*理由は - それは*内部のメソッドだから*;外部メソッドを呼び出さずに呼び出すことができるもの。したがって、互いに頼ることなく、アクセス可能な範囲を持たなければならない。私が間違っているなら誰か私を修正してください。 –

2

、決勝のは定数であり、彼らは初期化されてきた後は変更しないでください。最終的に最終決定をして、何が起こるか教えてください。

+0

finalが削除されてもコードはコンパイルされません。別のメソッドで定義された内部クラスの中で最終変数newiconidを参照できません。 –

+0

newiconid []をクラス属性として使用します。これにより、最終的なキーワード –

+0

が取り除かれます。実際のクラスに保管しておけば、コンパイルエラーなしにfinalを削除することができます。 –

関連する問題