2

假设我有两个活动:“A”和“B”。

活动 A 在其布局中有一个按钮。我想在活动 B 上设置它的单击侦听器实现。所以我们说这里是活动 A:

Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(B.this);

在活动 B 中,我正在尝试实现该功能:

public void OnClick(View v)
{
//DO SOMETHING
}

我收到以下错误:

View 类型中的方法 setOnClickListener(View.OnClickListener) 不适用于参数(A)

  • 范围内无法访问类型 A 的封闭实例

我在这里做错了什么?

4

2 回答 2

2

GUI 组件的处理必须伴随在实例化它的同一 UI 线程中。

因此,您所需的视图不正确,还请确保仅当视图设置有该组件并且当前可见(在前台)以供用户进行交互时,您才能使单击和其他侦听器工作。

如果你真的想要,那么你可以通过以下方式覆盖不同活动中点击监听器的默认实现:

1)静态引用:在活动 A 中将按钮设为公共静态,并在活动 B 中按 A 类的名称使用。

2)接口:在活动A上实现OnClickListener,但在B中不可访问

3)所有活动的自定义 MyClickListener

public class MyClickListener implements OnClickListener {
    @Override
    public void onClick(View v) {
        mContext = v.getContext();

        switch (v.getId()) {
case R.id.button:
// Your click even code for all activities
break;
default:
break; }}
}

使用它的类 A 和 B 都如下所示: Button button = (Button)findViewById(R.id.button); button.setOnClickListener(new MyClickListener());

于 2012-09-17T18:19:34.947 回答
1

您必须将 OnClickListener 的实例传递给button.setOnClickListener(..). A 类没有实现 OnClickListener,因此您必须实现它才能使其成为 OnClickListener 的实例。

class A extends Activity implements OnClickListener {
    // instance variable, constructors, etc
    @Override
    public void onClick(View v) { // note onClick begins with lowercase
        // DO SOMETHING
    }
}
于 2012-09-17T18:13:21.563 回答