我正在尝试这样做:
以编程方式在布局上创建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。
有人可以告知这是否是正确的方法?如果是这样,如何做逻辑?
感谢。
答案 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.
}
});
}