1

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

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

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

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

4

4 回答 4

1

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

button.setOnClickListener(this);
于 2012-07-31T16:27:37.383 回答
1

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

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...
}
于 2012-07-31T16:31:41.840 回答
0

尝试使用从按钮继承的类并在那里添加 OnClickListener。像这样:

class MyButton extends Button {

        OnClickListener clicker = new OnClickListener() {
        public void onClick(View v) {

              displayCell(v);

        }
        };

}
于 2012-07-31T16:33:47.577 回答
0

对此的解决方案可能是:

  • 创建不同的按钮实例。(所以你可以使它们成为最终的)
  • 使用setId()方法给他们一个整数ID(稍后引用它们)。您可以将ID存储在aList中以便稍后引用它们。
  • 创建后立即定义它们的 onClickListener。
于 2012-07-31T16:30:06.527 回答