setOnCheckedChangeListener

setOnCheckedChangeListener

    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.orientation);
    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
    {
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId) {
                case R.id.horizontal:
                    group.setOrientation(LinearLayout.HORIZONTAL);
                    break;
                case R.id.vertical:
                    group.setOrientation(LinearLayout.VERTICAL);
                    break;
            }
        }
    });


实际上,radioGroup.setOnCheckedChangeListener是什么?这是方法吗?那是什么呢?

最佳答案

setOnCheckedChangeListener()是一种设置侦听器的方法,该侦听器侦听特定的动作。

这个想法是这样的:


您希望单选按钮在用户更改选择时执行某些操作。
只要更改了选择,系统就会通知单选按钮。如果单选按钮设置了侦听器,则侦听器“侦听”事件-有一种机制可以通过调用其方法onCheckedChanged()来执行某些操作
您应该意识到在事件发生的那一刻调用了onCheckedChanged(),而不是在将侦听器传递给setOnCheckedChangeListener()方法的时候被调用了-因此在您的代码示例被调用时还没有!
需要类new RadioGroup.OnCheckedChangeListener()来传递侦听器的行为-直到Java 7(包括Java 7),如果没有类,就不能仅传递方法。从Java 8开始,您可以使用lambda expressions更轻松地执行它,但是现在就不用理会它。


这是一个相当高级的主题,我建议您首先学习以下内容:


Listener design pattern (a.k.a. Observer)
Anonymous classes


您可能会以简化的方式考虑它。您的代码具有以下含义:


  尊敬的radioGroup
  每当更改支票时,您应该做的事情是:
  
  
  如果选择了“水平”,
  致电group.setOrientation(LinearLayout.HORIZONTAL)
  如果选择了“垂直”,
  致电group.setOrientation(LinearLayout.VERTICAL)
  
  
  N.B.现在不要执行此操作,仅在更改支票后才执行!

08-25 22:54