2017-05-29 12 views
0

私はこのボタンの2次元配列でonClickListenerを設定するにはどうすればいいですか?

b[1][3] = (Button) findViewById(R.id.uno); 
b[1][2] = (Button) findViewById(R.id.due); 
b[1][1] = (Button) findViewById(R.id.tre); 


b[2][3] = (Button) findViewById(R.id.quattro); 
b[2][2] = (Button) findViewById(R.id.cinque); 
b[2][1] = (Button) findViewById(R.id.sei); 


b[3][3] = (Button) findViewById(R.id.sette); 
b[3][2] = (Button) findViewById(R.id.otto); 
b[3][1] = (Button) findViewById(R.id.nove); 

のようなボタンの2次元配列を持っていると私は私が機能onClickListenerからxyを得ることができる方法

b[x][y].setText("X"); 

のようなものを取得したいですか?

+0

地図/ペア/タプルのSparseArrayを押されたかを確認するのは簡単です。..最初にループ内で 'sparseArray.append(buttonID、new Pair(x、y))'のように構築してから、onClick 'Pair p = sparseArray.get(view.getId())' – Selvin

+0

で取得してください。とにかくインデックスが必要ですか?もしあなたが直接ボタンのIDを取得することができます。 –

答えて

0

一つの解決策は、カスタム・リスナー・クラスを作成し、それぞれの新しいリスナーのインスタンスを作成することです細胞。

クラス:

class MyClickListener implements View.OnClickListener { 
    int row; 
    int col; 

    public MyClickListener(int r, int c) { 
     row = r; 
     col = c; 
    } 
    ... 
} 

設定のリスナー:

for(int r=0; r<3; r++) 
    for(int c=0; c<3; c++) { 
     screenImages[r][c].setOnClickListener(new MyClickListener(r,c)); 
    } 

その後クラスで、それは、行/列が

0

あなたが最初

View view = findViewById(R.id.uno); 
view.setTag(1+""+3); 
b[1][3] = view; 

とを試すことができ、その後のonClickで

String s = v.getTag().toString(); 
int y = Integer.parseInt(TAG.substring(1)); 
int x = Integer.parseInt(TAG.substring(0,1)); 
私が使用している
0
b[1][3] = (Button) findViewById(R.id.uno); 
b[1][3].setTag("1#3"); 

b[1][3].setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     String tag = (String) v.getTag(); 
     int x = tag.split("#")[0]; // 1 
     int y = tag.split("#")[1]; // 3 
    } 
}); 
関連する問題