我添加了一些按钮,其中包含以下几行:
for (int i=0; i<XML.size(); i++) {
//add button
ToggleButton b = new ToggleButton(this);
// Setting the parameters
lefttextv.setLayoutParams(lleft);
b.setLayoutParams(bright);
//customize button
b.setOnClickListener(this);
b.setId(id_button);
System.out.println(id_button);
b.setHeight(100);
b.setWidth(200);
// Adding to the RelativeLayout as a child
layouth.addView(lefttextv);
layouth.addView(b);
id_button++;
}
但是我怎样才能获得OnClick()方法呢?我已经用这个方法实现了View.OnClickListener:
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId())
{
case id_button: Log.d("Button 0","Button 0 pressed);
break;
}
}
但是这不起作用,我如何获得Id?
答案 0 :(得分:7)
b
是视图,如果你的onClick方法在你的主类中,只需使用b.setOnClickListener(this);
并让你的活动实现onClickListener,你就可以了。或者按常规方式设置巡回听众。
id用于xml引用,创建对象并使用此id引用,在您的情况下,您创建了具有ToggleButton的所有属性的视图b
。这是观点。
相反,如果使用v.getId()
,请使用if(v == b)
答案 1 :(得分:6)
只需使用b.setOnClickListener(this)
,其中this
指的是实现OnClickListener
的类。
修改强>
您可以使用ID资源来识别按钮。有关详细信息,请参阅here。您可以将这些ID分配给以编程方式生成的视图,并在switch / case语句中检查它们。
或者@SmartLemon说,你可以查看if (v == b)
,然后就不需要打扰身份证了。
答案 2 :(得分:3)
您已将id
的{{1}}设为button
吗?
添加onCreate方法:
id_button
在onClick方法中使用该id,如下所示:
b1.setOnClickListener(this);
答案 3 :(得分:3)
在活动类中实现onClickListener时,可以使用此关键字传递当前对象,以注册组件的单击侦听器。
class MyActivity extends Activity implements OnClickListener{
private static final int id_button = 0;
public void onCreate(Bundle b){
//add button
ToggleButton b = new ToggleButton(this);
// Setting the parameters
lefttextv.setLayoutParams(lleft);
b.setLayoutParams(bright);
//customize button
b.setId(id_button);
System.out.println(id_button);
b.setHeight(100);
b.setWidth(200);
// Adding to the RelativeLayout as a child
layouth.addView(lefttextv);
layouth.addView(b);
b.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()){
case 0: Log.d("Button 0","Button 0 pressed);
break;
}
}
}
答案 4 :(得分:1)
像这样改变..
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int i= b.getId();
switch (v.getId())
{
case i:
Log.d("Button 0","Button 0 pressed");
break;
}
}