【问题标题】:Dynamically adding buttons in android, how to add onClick to xml在android中动态添加按钮,如何在xml中添加onClick
【发布时间】:2012-07-29 11:42:33
【问题描述】:

情况是这样的:我有一个动态生成一堆随机自定义图像按钮并将它们添加到 TableRows 中的 TableRows,在我的 xml 中的 TableView 中。此活动还有一个我想在单击这些按钮中的一个/任何一个时调用的方法。按钮内部有变量;该方法获取这些变量并将它们设置为 TextView (在同一个活动中),所以我认为所有按钮都可以使用这种方法。如果这些按钮是在 XML 中定义的,我只会使用 android:onClick="displayCell" 来指定方法,但它们不是。有没有办法在活动中生成这些按钮时为这些按钮设置 onClick 还是必须使用

button.setOnClickListener(new OnClickListener(){....});

然后像我在这里的一些答案中看到的那样经历一堆麻烦?我遇到的问题是我似乎无法从 onClick 内部调用我的方法,因为方法(按钮)的参数不是最终的(我在循环中制作了一堆“按钮”,所以我不'认为不可能):

button.setOnClickListener(new OnClickListener(){ public void onClick(查看 q){ button.getActivity().displayCell(button);//我想做这样的事情但是这显然行不通 } });

【问题讨论】:

    标签: android dynamic onclick onclicklistener


    【解决方案1】:

    您可以让 Activity 实现 OnClickListener,然后(假设您在 Activity 中):

    button.setOnClickListener(this);
    

    【讨论】:

      【解决方案2】:

      是的,正如 comodoro 所说,或者让你的 onClickLIstener 成为你的类的成员变量,不要在每个按钮上执行“新建”。

      private OnClickListener mOnClickListener = new OnClickListener() {...};
      

      在创建按钮时:

      button.setOnClickListener(mOnClickListener);
      

      监听器中的 onClick() 函数将传递给按钮本身的视图。您可以从此函数访问按钮变量等。

      public void onClick(View v)
      {
       ImageButton button = (ImageButton)v;
       // and access your button data via button object...
      }
      

      【讨论】:

        【解决方案3】:

        解决方案可能是:

        • 创建不同的按钮实例。(这样您就可以使它们成为最终的)
        • 使用setId() 方法为它们提供一个整数ID(以便稍后引用它们)。您可以将ID 存储在List 中以便以后引用它们。
        • 在创建后立即定义其 onClickListener。

        【讨论】:

          【解决方案4】:

          尝试使用继承自按钮的类并在其中添加 OnClickListener。像这样:

          class MyButton extends Button {
          
                  OnClickListener clicker = new OnClickListener() {
                  public void onClick(View v) {
          
                        displayCell(v);
          
                  }
                  };
          
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-07-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-20
            • 1970-01-01
            相关资源
            最近更新 更多