2016-08-23 28 views
1

最近、私は単純なボードゲームアンドロイドアプリを作っています。このゲームは7x7グリッドで行われ、私はすべての四角形のボタンを作っています。ループで多数のonClick()をどのように設定できますか?

これは私の初めてのことではなく、レイアウトを作るだけでなく、これらのボタンのそれぞれにonClick()という文字を書くことも大変でした。マトリックスアレイ(int state[7][7]Button board[][]=new Button[7][7])のおかげで、私は1つの関数にすべての49行のコードを突き出すことができますが、最後の時間は、私は、コードの一部を省略しているため

board[0][0]=(Button)findViewById(R.id.board00); 
board[0][1]=(Button)findViewById(R.id.board01); 
int i; 
for(i=0;i<2;i++){ 
    board[0][i].setOnClickListener(new OnClickListener() { 
    public void onClick(View v){ 
     my_function(0,i); 
    } 
} 

のように書いて(私はやや完全なコードを書かなければなりませんでした誰もがその部分を逃したと話していました)。

は、元々意味していた数字ではなく、結果として得られるiにすべてのボタンを合わせます。

だから私の質問はこれです:[i][j]ボタンをのために呼び出すための方法はありますか?(私はその部分を知っています。 1つ1つ入力するか、コードを生成するのではなく、ijのそれぞれ

P.S.私はここで多くの活動をしていませんでしたし、自分のタイプの質問を効果的に探す方法や、質問に実際に答えがあるかどうかを確認する方法がわかりません。あなたが同じ答えで質問を見つけたら、教えてください。私はこれを検索しました。

答えて

1

、これは私はあまり理解をしたとは思わない

for (int i = 0; i < 7; i++) { 
    for (int j = 0; j < 7; j++){ 
    final int ii = i; 
    final int jj = j; 
    board[j][i].setOnClickListener(new OnClickListener() { 
    public void onClick(View v){ 
     my_function(ii, jj); 
    } 
} 
1

匿名クラスは使用しないでください。フルクラスを作ってください。それからあなたはパラメータで呼び出して渡すことができるコンストラクタを持つことができます。たとえば、

private static class MyButtonListener implements OnClickListener { 
    int i; 
    int j; 
    public MyButtonListener(int i, int j) { 
     this.i = i; 
     this.j = j; 
    } 
    public void onClick(View v){ 
     my_function(i, j); 
    } 
} 

ループでは、匿名クラスの代わりにnew MyButtonListener(i,j)を作成します。あなたは匿名クラスを維持したい場合は

+0

を動作するはずです。 'new MyButtonListener(i、j)'の作成について短いコードを書くことができますか? – MetaData

関連する問題