public class CheckBoxDemo extends Activity implements
CompoundButton.OnCheckedChangeListener {
CheckBox cb;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
cb=(CheckBox)findViewById(R.id.check);
cb.setOnCheckedChangeListener(this);
}
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
cb.setText(R.string.checked);
}
else {
cb.setText(R.string.unchecked);
}
}
}
我在理解方面遇到的问题是这条线在
中传递的参数究竟是如何工作的cb.setOnCheckedChangeListener(this);
此外,方法onCheckedChanged
未在任何地方显式调用,Android如何建立连接以将复选框状态连接到方法名称。
答案 0 :(得分:2)
您正在实现界面,并且代码中的onCheckedChanged()
。您现在的活动也是听众。
实现接口时,还必须覆盖接口指定的方法。这意味着实现接口的类现在可以充当该接口的实例。
public class CheckBoxDemo extends Activity implements
CompoundButton.OnCheckedChangeListener {
您的CheckBoxDemo
课程实施OnCheckedChangeListener
,因此如果需要,它现在可以充当OnCheckedChangeListener
。
然后在您的代码中稍后
public void onCheckedChanged
CheckBoxDemo
需要为所有工作实现的接口中的方法。
因此,您现在可以使用this
(请参阅当前的CheckBoxDemo
实例)传递给setOnCheckedChangeListener ()
因为满足所有先前条件 - 您的班级现在可以成功收听检查事件。
有关更多信息,请阅读java教程中的Interfaces。
答案 1 :(得分:1)
当您宣布上课时,它会在OnCheckedChangeListener
类
CompoundButton
的{{3}}
implements
CompoundButton.OnCheckedChangeListener
当您使用Interface引用此对象时,您正在使用的是OnCheckedChangeListener
的实例。
当您实施Interface
并且Interface
有方法时,您的Activity
(或任何类)必须实现该方法。在您的情况下,它是onCheckedChanged()
,因此您的JVM将知道建立这种关系。
答案 2 :(得分:1)
您可以查找CheckBox
的来源,但非常粗略地说它是这样的(这不是代码的摘录,而是演示它的外观):
public class CheckBox implements ... {
private OnCheckedChangeListener occl;
public void setOnCheckedChangeListener(OnCheckedChangeListener newlistener) {
occl = newlistener;
}
/* this will be called when you click the CheckBox */
public void check(...) {
/* draw the check mark and similar things, then: */
occl.onCheckedChanged(...);
}
}
因此,onCheckedChanged()
的内部实施实际上正在调用您的Component
,在这种情况下您的CheckBox
。