8

プログラムでいくつかの ImageButtons を作成したいと考えています。それらを作成することはできますが、ボタン 0、ボタン 1、ボタン 2 のいずれをクリックしても、クリック イベント リスナーは同じビュー (ボタン 2) を受け取り続けます。

    RelativeLayout gameBoard = (RelativeLayout) findViewById(R.id.RelGameboard);

    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    lp.addRule(RelativeLayout.CENTER_IN_PARENT,1);

    for(int i = 0 ; i <  3 ; i++)
    {

        ImageButton btnGreen = new ImageButton(this);
        btnGreen.setImageResource(R.drawable.bola_verde);
        btnGreen.setLayoutParams(lp);
        btnGreen.setOnClickListener(mGreenBallOnClickListener);
        btnGreen.setBackgroundColor(Color.TRANSPARENT); 
        btnGreen.setTag(i);
        btnGreen.setId(i);

                    gameBoard.addView(btnGreen);


     }'

クリック イベント リスナー:

private View.OnClickListener mGreenBallOnClickListener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        //check which green ball was clicked
        ImageButton imgBtn = (ImageButton) v;

    Log.i("greeny","Clicked on green ball->"+imgBtn.getTag()+" v.ID->"+v.getId());
    }
};

描画されたイメージボタンの場合、クリックすると次のようになります:緑のボールをクリック-> 2 v.ID-> 2

ボタンはさまざまな位置にあります (それぞれに異なるパディングを設定しましたが、コードを簡素化するためにここには入れませんでした)

4

3 に答える 3

0

これは、ボタンのレイアウト、すべてのボタンを同じ場所に設定していないために発生します。

Use Aboveof,Belowof,left,right,center

params.addRule(RelativeLayout.ALIGN_PARENT_ABOVE);  
    relativeLayout.addView(button, params);
于 2013-05-07T10:46:11.737 に答える