传递参数:为方法订阅方法

时间:2013-12-30 22:37:37

标签: java android observer-pattern

我刚开始尝试了解Java以便能够编写简单的Android应用程序。现在我尝试与“标准控制”取得联系,正如我的书所说。

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    CheckBox cb = (CheckBox) findViewById(R.id.checkBox1);
    cb.setOnCheckedChangeListener( new OnCheckedChangeListener(){
        public void onCheckedChanged(CompoundButton buttonView, 
            boolean isChecked)
        {
            TextView tv = (TextView) findViewById(R.id.textView1);
            if (isChecked){
                tv.setText("Checkbox is checked!!");}
            else {tv.setText("Checkbox is unchecked!!");}
        }
    });}

我的GUI包含TextView和CheckBox对象。 我基本上从我的书中复制了这段代码。然而,我或多或少地了解最新情况。 据我所知,一个过程/方法(称为“onCheckedChanged”)应该作为订阅者添加到我的Checkbox的事件“OnCheckedChange”。不幸的是,我没有得到调用此过程的时间或地点,因为它必须得到参数对象,对吗? 到目前为止,该过程只“知道”参数应该是哪种类型。 我认真地试图解决这个问题,但在一两个小时内没有取得任何进展。 因此,如果有人能帮助我,我会非常感激。

1 个答案:

答案 0 :(得分:0)

系统为您调用onCheckedChanged()方法,并在您为已添加侦听器的CheckBox更改检查状态时将参数传递给方法。这是由系统自动处理的,具有正确的参数(检查状态已更改的CheckBox以及现在是否已检查),您可能永远不想在代码中手动调用onCheckedChanged()

您应该知道您没有直接订阅方法onCheckedChanged()。您实际上是在创建一个实现onCheckedChangeListner接口并在此类中实现该方法的匿名类。您正在将此类的实例化对象传递给setOnCheckedChangeListener()方法。

请注意您在发布的代码中覆盖的onCreate()方法。这类似于系统在创建Activity对象时调用它。在您自己的代码中,您无法在onCreate()对象上调用Activity,这是一个回调,您可以覆盖并添加代码。