如何从程序添加按钮获取OnClick()?

时间:2012-09-24 11:57:29

标签: android button onclick onclicklistener buttonclick

我添加了一些按钮,其中包含以下几行:

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?

5 个答案:

答案 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;
    }
}