0

これは私のコードです..

for (int i = 0; i < 12; i++) 
   {
          buttons[i] = (Button)findViewById(R.id.buttonid);
        @Override
        public void onClick(View v) {
           // in this method I want to set the button text to the iteration variable 'i'
        }
    });
   }

onclick メソッド内で反復変数を取得する必要があります。onclick メソッドの前に、i 値を別の int 変数 (final を使用する場合と使用しない場合) に代入してみました。しかし、これはすべていくつかのエラーを示しています。

前もって感謝します。

4

2 に答える 2

2

メソッドの外側のクラスの先頭で宣言することにより、 i 変数をグローバルにします。private int i; http://en.wikipedia.org/wiki/Global_variable

int次に、 for ループ内で言う必要はありません

for (i = 0; i < 12; i++) 
   {
         buttons[i] = (Button)findViewById(R.id.buttonid);
        @Override
        public void onClick(View v) {
           // in this method I want to set the button text to the iteration variable 'i'
        }
    });
   }

コメントに記載されているように final 修飾子を使用することもできます。エラーをデバッグしてもらいたい場合は、それをどのように使用しようとしたかを投稿する必要があります。

于 2013-01-28T16:59:26.790 に答える
0

i変数をグローバル/最終変数として持つことから離れて、のsetTag()メソッドを使用しButtonて値を渡すことができます。

   for (int i = 0; i < 12; i++) {
          buttons[i] = (Button)findViewById(R.id.buttonid);
          buttons[i].setTag(new Integer(i));
          buttons[i].setOnClickListener(listener);
   }

そして、分離しますOnClickListener

    OnClickListener listener = new View.OnClickListener() {

        @Override
        public void onClick(View v) {
               Integer iHolder = v.getTag();
               int i = iHolder.intValue();
               // set button text
        }
    };

このようにして、Buttonそれ自体が、iグローバルに変動したり宣言されたりする代わりに、の値への参照を保持しfinalます。

于 2013-01-28T17:14:44.663 に答える