[英]Need help in understanding how this checkbox code works in Android
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如何建立連接以將復選框狀態連接到方法名稱。
您所用的接口和onCheckedChanged()
是在你的代碼。 您的活動現在也是偵聽器。
實現接口時,還必須重寫接口指定的方法。 這意味着實現該接口的類現在可以充當該接口的實例。
public class CheckBoxDemo extends Activity implements
CompoundButton.OnCheckedChangeListener {
您的CheckBoxDemo
類實現了OnCheckedChangeListener
因此如果需要,它現在可以充當OnCheckedChangeListener
。
然后在您的代碼中
public void onCheckedChanged
CheckBoxDemo
需要使用接口中的方法來實現所有功能。
因此,由於滿足所有先前條件,您現在可以使用this
(引用當前的CheckBoxDemo
實例)傳遞給setOnCheckedChangeListener ()
-您的類現在可以成功偵聽檢查事件。
有關更多信息,請閱讀Java教程中的Interfaces 。
您可以查找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
onCheckedChanged()
調用的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.