使用onClick方法获取按钮索引

时间:2016-06-20 19:39:02

标签: android class button return

所以,我并没有让自己清楚。我在尝试从矩阵中获取按钮索引时遇到了一些麻烦。 我有这个矩阵bt [4] [4],每个按钮都有这样的值:  btn11 = bt [0] [0]。 现在我想要做的是,每当我点击一个按钮,我就会“坐下来”。 例如: Bt11会给出[0]和[0] 。 现在我遇到的问题是:

  1. 我为每个按钮设置了监听器,但我无法实现“onClick”方法。 每当我尝试在这里实现“public class easy extends Activity”时,我都会收到一条错误消息。
  2. 第二个问题,我不知道从bt [x] [y]获得坐标。
  3. 总结一下。我想设置一个onClick方法,所以每次你点击一个按钮就可以得到它[x] [y]的坐标。 这是我的代码:

    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);
    
    
    
        }
    
    }
    

1 个答案:

答案 0 :(得分:1)

我不完全确定你的问题是什么,但根据我的理解,你想在每个按钮上都有一个View.OnClickListener(),当你点击按钮时你想要做对吗?

已编辑:我已编辑了答案,因为问题已在下面的评论中得到澄清。

您想要做的只是迭代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;
        }
    }

}

您只需致电getButtonCoordinate(View)ButtonCoordinate会在Button中返回包含x及其ybt[][]坐标的this.$