2016-06-20 16 views
0

したがって、私は自分自身を明確にしていませんでした。行列からボタンインデックスを取得しようとするのに少し問題があります。 私はこの行列bt [4] [4]を持ち、各ボタンは次のような値を持っています: btn11 = bt [0] [0]。 私がしたいのは、ボタンをクリックするたびに、私はそれを「座標」にします。 例:Bt11は[0]と[0]を返します。。 は、今私がいる問題:私は、各ボタンにリスナーをonClickメソッドを使用してボタンインデックスを取得する

  1. 設定しましたが、私は「onClickの」メソッドを実装することはできません。 ここで実装しようとすると、「public class easy extends Activity」というエラーメッセージが表示されます。
  2. 第2の問題は、私はbt [x] [y]から座標を得ることを知らない。

まとめてください。 onClickメソッドを設定したいので、ボタンをクリックするたびに[x] [y]の座標が得られます。私はあなたの質問がここにあるものを完全にわからないんだけど、私が理解から、各ボタンのView.OnClickListener()をしたい、とボタンがクリックされたときに右の何かをしたい

public class easy extends Activity { //Can't implement OnClick Listener 
    Button bt[][] = new Button[4][4]; 
    Button up; 
    Button down; 
    Button left; 
    Button right; 

    int listaTroca[] = new int[10]; // lista pra receber os valores de retorno da logica 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_easy); 





     //Linha 1 
     bt[0][0] = (Button) findViewById(R.id.bt11); 
     bt[0][0].setOnClickListener((View.OnClickListener) this); 

     bt[0][1] = (Button) findViewById(R.id.bt12); 
     bt[0][1].setOnClickListener((View.OnClickListener) this); 

     bt[0][2] = (Button) findViewById(R.id.bt13); 
     bt[0][2].setOnClickListener((View.OnClickListener) this); 

     bt[0][3] = (Button) findViewById(R.id.bt14); 
     bt[0][3].setOnClickListener((View.OnClickListener) this); 
     //--------------------- Linha 2 
     bt[1][0] = (Button) findViewById(R.id.bt21); 
     bt[1][0].setOnClickListener((View.OnClickListener) this); 

     bt[1][1] = (Button) findViewById(R.id.bt22); 
     bt[1][1].setOnClickListener((View.OnClickListener) this); 

     bt[1][2] = (Button) findViewById(R.id.bt23); 
     bt[1][2].setOnClickListener((View.OnClickListener) this); 

     bt[1][3] = (Button) findViewById(R.id.bt24); 
     bt[1][3].setOnClickListener((View.OnClickListener) this); 
     //------------------------Linha 3 
     bt[2][0] = (Button) findViewById(R.id.bt31); 
     bt[2][0].setOnClickListener((View.OnClickListener) this); 

     bt[2][1] = (Button) findViewById(R.id.bt32); 
     bt[2][1].setOnClickListener((View.OnClickListener) this); 

     bt[2][2] = (Button) findViewById(R.id.bt33); 
     bt[2][2].setOnClickListener((View.OnClickListener) this); 

     bt[2][3] = (Button) findViewById(R.id.bt34); 
     bt[2][3].setOnClickListener((View.OnClickListener) this); 
     //---------------------Linha 4 
     bt[3][0] = (Button) findViewById(R.id.bt41); 
     bt[3][0].setOnClickListener((View.OnClickListener) this); 

     bt[3][1] = (Button) findViewById(R.id.bt42); 
     bt[3][1].setOnClickListener((View.OnClickListener) this); 

     bt[3][2] = (Button) findViewById(R.id.bt43); 
     bt[3][2].setOnClickListener((View.OnClickListener) this); 

     bt[3][3] = (Button) findViewById(R.id.bt44); 
     bt[3][3].setOnClickListener((View.OnClickListener) this); 
     //----------------------FIM DECLARAÇÃO + OUVIDOS 
     listaTroca = Logic.Logic_main(1,1,1); 



    } 

} 
+0

'button.setTag(key、value)'を使ってみてください。その後、onClickが呼び出されると、 'v.getTag(key)'を使って値を返すことができます。 –

+0

あなたの投稿に質問はありません。何が必要なのか/何がうまくいかないの? – Vucko

+0

@Vucko既に質問を編集しました。ごめんなさい。 –

答えて

1

: ここに私のコードです?

EDIT:私は以下のコメントで質問が明確になったので、答えを編集しました。

あなたが何をしたいのか、単純にそうように、右のボタンを見つけるためにあなたのbt[][]を反復処理されます。

public class Easy extends Activity { 

    Button[][] bt = new Button[4][4]; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_easy); 

     //Linha 1 
     bt[0][0] = (Button) findViewById(R.id.bt11); 
     bt[0][0].setOnClickListener(mOnClickListener); 

     bt[0][1] = (Button) findViewById(R.id.bt12); 
     bt[0][1].setOnClickListener(mOnClickListener); 

     // ADD YOUR OTHER findViewByID 

    } 

    View.OnClickListener mOnClickListener = new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      ButtonCoordinate bc = getButtonCoordinate(v); 
      if (bc != null) { 
       // You now have your button, and the coordinates 
       Log.d("Easy", "Button.position[ x:" + bc.x + ", y:" + bc.y + " ]"); 
      } 
     } 
    }; 

    private ButtonCoordinate getButtonCoordinate(View v) { 
     for (int x = 0 ; x < bt.length ; x++) { 
      for (int y = 0 ; y < bt[x].length ; y++) { 
       Button b = bt[x][y]; 
       if (v == b) { 
        return new ButtonCoordinate(x, y, b); 
       } 
      } 
     } 
     return null; 
    } 

    public static class ButtonCoordinate { 
     public final int x; 
     public final int y; 
     public final Button button; 
     public ButtonCoordinate(int x, int y, Button button) { 
      this.x = x; 
      this.y = y; 
      this.button = button; 
     } 
    } 

} 

あなただけButtonを含むButtonCoordinateが返されるgetButtonCoordinate(View)を呼び出す必要があり、それがxyですbt[][]

+0

私はbt [x] [y]でインデックスを取得しようとしています。例:bt11はintリストに戻ります[0,0] –

+0

そして、私はそれを汎用メソッドにする必要があります。したがって、それらのボタン(bt [x] [y])のどれかをクリックすると、xとyの値が得られます。 –

+0

さて、私は今それを得る。私は自分の答えを編集しており、上のコードはあなたのために今働くはずです。 – oiZo

関連する問題