0
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はどのように接続を確立して、チェックボックスの状態をメソッド名に接続しますか.

4

3 に答える 3

2

インターフェイスを実装しており、コード内にonCheckedChanged() あります。あなたのアクティビティはリスナーでもあります。

インターフェイスを実装するときは、インターフェイスによって指定されたメソッドもオーバーライドする必要があります。これは、インターフェイスを実装するクラスがそのインターフェイスのインスタンスとして機能できるようになったことを意味します。

public class CheckBoxDemo extends Activity implements
CompoundButton.OnCheckedChangeListener {

CheckBoxDemoクラスが実装されOnCheckedChangeListenerているため、必要に応じて機能するようになりましOnCheckedChangeListenerた。

その後、コードの後半で

public void onCheckedChanged

CheckBoxDemoこれは、すべてが機能するために実装する必要があるインターフェイスのメソッドです。

したがって、以前のすべての条件が満たされているためthis、(現在のCheckBoxDemoインスタンスを参照して) を使用して渡すsetOnCheckedChangeListener ()ことができます。これで、クラスはチェック イベントを正常にリッスンできます。

詳細については、Java チュートリアルのインターフェイスを参照してください。

于 2013-01-07T21:25:53.490 に答える
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です。

于 2013-01-07T21:30:23.187 に答える
1

クラスを宣言すると、クラスから呼び出されるインターフェイスが実装されますOnCheckedChangeListenerCompoundButton

implements
    CompoundButton.OnCheckedChangeListener 


this を使用する場合、使用している this オブジェクトを参照します。これは のインスタンスですOnCheckedChangeListener
を実装しInterfaceInterfacehas メソッドを実装する場合、Activity(または実装するクラスは) そのメソッドを実装する必要があります。あなたの場合、そのonCheckedChanged()ため、JVMはこの関係を確立することを認識しています。

于 2013-01-07T21:27:37.177 に答える