【问题标题】:Android: Is it possible to call a method directly from setOnClickListener()?Android:是否可以直接从 setOnClickListener() 调用方法?
【发布时间】:2013-04-04 23:12:12
【问题描述】:

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

是否有可能出现以下情况?

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));
  }
}

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

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

【问题讨论】:

    标签: java android methods onclicklistener


    【解决方案1】:

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

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

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

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

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

    现在您可以简单地将 XML(或 manually)中的 Buttontag 属性设置为您希望的任何内容,它将被传递到侦听器(进而传递给方法)。

    【讨论】:

    • 对不起,这是一个愚蠢的问题,但为什么里面有循环?
    • 我不确定你要做什么。我编辑了我的答案,以防您尝试使用不同参数调用someMethod 的多个按钮。
    猜你喜欢
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多