3

我正在动态创建一些按钮,理想情况下希望能够在按下按钮时运行一个方法。

像下面这样的事情甚至可能吗?

private void someMethod(int ID){
 //on button pressed do something with the ID
}

private void otherMethod(){

  for( Program element : someList)
  {
    addButton.setOnClickListener(someMethod(element.getID));
  }
}

显然,这只是一些代码的模拟来说明我的问题。我知道你可以实例化一个新类,所以看起来你应该能够调用一个方法,尽管到目前为止,我的尝试一直在出错。

我浏览了网络,但找不到任何答案,所以我想在这里问。

4

1 回答 1

4

setOnClickListener定义单击按钮时会发生什么。对同一个按钮设置多次是没有意义的;您设置的最后一个将是活动的。

要在侦听器中调用方法,请声明一个匿名类覆盖:

addButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
           someMethod(...);
        }
});

如果您尝试设置具有相似功能的多个按钮,则需要遍历按钮(例如在列表中),并设置每个按钮的OnClickListeners. 要为每个按钮实现不同的变量,您可以使用View's tag

for (Button b : buttons) {
    b.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
             someMethod(v.getTag());
        }
    });
}

现在,您可以简单地将XML 中的Button'属性(或手动)设置为您想要的任何内容,它将被传递到侦听器(以及方法)。tag

于 2013-04-04T23:22:11.950 回答