簡體   English   中英

需要幫助來了解此復選框代碼在Android中的工作方式

[英]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

當您聲明類時,它OnCheckedChangeListenerCompoundButton類實現一個名為OnCheckedChangeListener接口。

implements
    CompoundButton.OnCheckedChangeListener 


當你使用這個它指的this對象您與哪些工作是一個實例OnCheckedChangeListener
當實現Interface ,並且Interface具有方法時,那么Activity (或任何具有此方法的類)必須實現該方法。 在您的情況下,其onCheckedChanged() ,因此您的JVM將知道建立這種關系。

您可以查找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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM