2

我有一个 init 方法,它使用 findViewById(R.id.pin1) 找到每个按钮,然后设置一个 onclick 方法,该方法将该方法写入蓝牙输出流。

    Button myButton = (Button) findViewById(R.id.pin1);
    myButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String msg = "1".toString();
            try {
                mmOutStream.write(msg.getBytes());
            } catch (IOException e) {
                error();
            }
        }
    });

从字面上看,我改变的只是 1 到 2 等等。所以下一个代码段是:

    Button myButton = (Button) findViewById(R.id.pin2);
    myButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String msg = "2".toString();
            try {
                mmOutStream.write(msg.getBytes());
            } catch (IOException e) {
                error();
            }
        }
    });

我尝试了一些方法,比如制作一个字符串 pinButton = "pin" + i.toString() 然后是 R.id.pinButton 但它不起作用。(也就是说, i 在我包围代码的 forloop 中)

4

3 回答 3

2

是的,您可以switch在xml 中为每个button id调用相同的然后您只需根据单击的更改变量onClick()buttonmsgid

@Override
    public void myClick(View v) {
      String msg = "";
       switch (v.getId())
       {
             case (R.id.button1):
              msg = "1";
              break;
              case (R.id.button2):
              msg = "2";
             break
      }
        try {
            mmOutStream.write(msg.getBytes());
        } catch (IOException e) {
            error();
        }
    }
});

要设置onClick()in xml,只需为每个Button

<Button
    ...
    android:onClick="myClick"/> // name this whatever you want the method to be called and do the same for each Button

此外,您无需致电toString()msg因为它已经是String

于 2013-05-03T01:22:25.063 回答
1

自己制作OnClickListener,然后通过执行附加它button.setOnClickListener(new MyButtonListener(number));

private class MyButtonListener extends OnClickListener {

    private int mNumber;

    public MyButtonListener(int number) {
        mNumber = number;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        String msg = String.valueOf(mNumber);
        try {
            mmOutStream.write(msg.getBytes());
        } catch (IOException e) {
           error();
        }
    }
}
于 2013-05-03T01:22:17.810 回答
-2

您可以通过标记按钮来做到这一点。标记视图可让您将数据分配给它以供以后检索。

Button pin1 = (Button) findViewById(R.id.pin1);
Button pin2 = (Button) findViewById(R.id.pin2);
pin1.setTag("1");
pin2.setTag("2");

OnClickListener myOnClickListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        String msg = v.getTag();
        try {
            mmOutStream.write(msg.getBytes());
        } catch (IOException e) {
            error();
        }
    }
}
pin1.setOnClickListener(myOnClickListener);
pin2.setOnClickListener(myOnClickListener);
于 2013-05-03T01:34:33.940 回答