Android:知道按下哪个按钮是以编程方式创建的按钮

时间:2011-09-10 07:13:18

标签: android button

我正在尝试这样做:

以编程方式在布局上创建4个按钮。然后,为每个按钮创建一个onclick侦听器。然后,根据按下哪个按钮,将做一些逻辑。

我在XML文件中创建了一个LinearLayout,并称之为“layout”。

所以,我的代码是这样的:

    layout = (LinearLayout)findViewById(R.id.layout);

    //Create the array of buttons
    Button [] subjectButtons_BT = new Button[4];

    for(int i=0; i<4; i++){
        subjectButtons_BT[i] = new Button(this);
        // Add the button to the layout
        layout.addView(subjectButtons_BT[i]);
        subjectButtons_BT[i].setOnClickListener(new Button.OnClickListener() {
                public void onClick(View v) {
               // if it is the first button, do LOGIC1
               // if it is the second button, do LOGIC2 etc 
                }
        });
    }

到目前为止,我已经设法创建了4个按钮,我可以点击按钮。 但是,我不知道如何在setOnClickListener部分中使用逻辑。

我想知道按下了哪个按钮。所以,我尝试使用v.getId()但它总是返回-1。

有人可以告知这是否是正确的方法?如果是这样,如何做逻辑?

感谢。

2 个答案:

答案 0 :(得分:2)

您有两个选项可用于识别单击哪个动态按钮。

 1) Set ID to the button and compare ID 
 2) Set Tag to the button if you have come more information about button
     and want to access it

1)您可以为按钮设置ID,在onClick()方法中,您可以通过button.getId()方法获取ID,然后您可以根据点击比较ID并执行操作。

2)如果您设置了标签,那么您必须通过调用button.getTag()方法来获取标记,这样您就可以使用按钮传递对象

答案 1 :(得分:0)

您可以在创建按钮后设置按钮的ID,然后在OnClickListener中检查该ID

layout = (LinearLayout)findViewById(R.id.layout);

//Create the array of buttons
Button [] subjectButtons_BT = new Button[4];

for(int i=0; i<4; i++){
    subjectButtons_BT[i] = new Button(this);
    subjectButtons_BT[i].setId(i);
    // Add the button to the layout
    layout.addView(subjectButtons_BT[i]);
    subjectButtons_BT[i].setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                int id = v.getId();
                if (id == 0) {
                } else if (id == 1) {
                }
                //etc.
            }
    });
}