5

我添加了一些带有以下行的按钮:

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?

4

5 回答 5

7

b是视图,如果您的 onClick 方法在您的主类中,只需使用b.setOnClickListener(this);并让您的活动实现 onClickListener 就可以了。或者按照通常的方式设置巡回听众。

id 用于 xml 引用,创建对象并使用此 id 来引用,在您的情况下,您使用bToggleButton 的所有属性创建了视图。这是视图。

相反,如果使用v.getId()只是使用if(v == b)

于 2012-09-24T12:04:49.800 回答
6

只需使用b.setOnClickListener(this),wherethis指的是实现的类OnClickListener

编辑:

您可以使用 ID 资源来识别您的按钮。请参阅此处了解更多信息。您可以将这些 ID 分配给以编程方式生成的视图,并在您的 switch/case 语句中检查它们。

或者,正如@SmartLemon 所说,您可以只检查if (v == b),然后您就不需要打扰ID。

于 2012-09-24T12:00:39.830 回答
3

你有正确idbutton设置id_button吗?

添加 onCreate 方法:

 b1.setOnClickListener(this);    

在 onClick 方法中使用该 ID,如下所示:

@Override
 public void onClick(View v) {
    // TODO Auto-generated method stub
    if(v.getId() == R.id.id_button)
    {
    Log.d("Button 0","Button 0 pressed);
        break;
    }
}
于 2012-09-24T12:02:01.847 回答
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;
       }
    }
}
于 2012-09-24T12:05:38.970 回答
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;
    }
}
于 2012-09-24T12:05:40.837 回答