需要帮助了解此复选框代码在Android中的工作原理

时间:2013-01-07 21:24:29

标签: java android android-intent android-widget

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如何建立连接以将复选框状态连接到方法名称。

3 个答案:

答案 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