说我有两个活动:“A”和“B”。
活动A的布局中有一个按钮。我想在Activity B上设置它的click listener实现。 那么让我们说这里的活动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的封闭实例
我在这里做错了什么?
答案 0 :(得分:2)
GUI组件的处理必须伴随实例化的那个UI线程。
所以您想要的视图不正确还要确保只有在使用该组件设置视图并且当前可见(在前景中)时,您才可以使用click和其他侦听器用户进行互动。
如果你真的想要那么你可以通过以下方式覆盖不同活动中的点击监听器的默认实现:
1)静态引用:将按钮设置为活动A中的公共静态,并按活动B的名称在活动B中使用。
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类,如下所示: 按钮=(按钮)findViewById(R.id.button); button.setOnClickListener(new MyClickListener());
答案 1 :(得分: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
}
}