2011-10-18 8 views
2
for (int i = 0; i < 9; i++) 
{ 
    b[i].setOnClickListener(
     new OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       justclicked(i); 
      } 
     } 

    ); 
} 

forループを使用して9つのボタンにアクションリスナーを配置しようとしています。上記のコードは私にエラーを与えています。私の値が原因でエラーが表示されないのですか?ありがとう、世界クラスの専門家@スタックオーバーフロー!整数変数iが表示されています

+0

を利用することができIはそれが機能するためには、最終的なまたは静的である必要があります。すべてのビューがどのビューが実際にクリックされたかを判断するために必要な 'タグ'または 'id'プロパティを使用することをお勧めします。 –

+0

@ReubenScratton最終的にはタグ-1のために+1します(もし彼が最終的に使用するなら、それはいつもjustclickedします(8)) – Selvin

+0

Reuben Scrattonがuse tag ... 'b [i ]).setTag(i); 'b [i] .setOnClickListener ...'の前に 'justclicked((int)v.getTag());'またはManfred Moserがビルド 'クラスOCL実装のOnClickListener {public OCL (int i){this.i = i;} int i; public void onClick(vを表示) { justclicked(i); }} 'このように' b [i] .setOnClickListener(new OCL(i)); ' – Selvin

答えて

6

いいえ、iは最終的なものではないため、匿名の内部クラスからアクセスする必要があります。

b[i].setOnClickListener(... 

final int finalI = i; 

を追加し、その後finalIの代わりi使用 :justclicked(finalI);

その後、ifinalIのより良い名前を考えてください。

+0

私はあなたの答えを確認します:) – Houcine

+0

@ライアン・スチュワートとOPの次の質問は...なぜonClickで私はいつも8を得ました: – Selvin

+0

最終的な動作はCで静的ではありませんか... ...そして同じvarすべての反復で。だから結局それは8になるでしょうか? – Selvin

2

コンストラクタ引数としてiを指定してOnClickListenerを実装するクラスを作成し、これを使用してリスナーを設定します。

0
for(int i = 0; i<9;i++) { 
    // use j for justclicked 
    final int j = i; 
    b[i].setOnClickListener(

     new OnClickListener() 
     { 
      public void onClick(View v) 
      { 

       justclicked(j); 

      } 
     } 


      ); 
+1

hehe ...なぜjustclicked(j); '....' justclicked(8); '同じことをする:jはonClickで常に8になります:) – Selvin

+0

Ryanの答えと同じ+1: – Houcine

+0

:)あなたの右.. – Blackbelt

1

あなたは以下を使用することができ、「タグ」のルートを使用する場合:あなたは(あなたがする必要がある場合)、インデックスにアクセスするには、ビューのプロパティを使用していないのはなぜ

 for (int i = 0; i < b.length; i++) { 
      b[i].setTag(i); 
      b[i].setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) 
       { 
        int value = Integer.parseInt(v.getTag().toString()); 
        justclicked(value); 

       } 
      }); 
     } 
0

を。 たとえば、あなたはsetTag()メソッド

v.setTag(index) 

public void onClick(View v) 
{ 
    int index = (int)v.getTag(); 
    justClicked(index); 
} 
関連する問題