【问题标题】:Transmission of arguments: subscribing a method to an event参数的传输:为事件订阅方法
【发布时间】:2013-12-30 22:37:37
【问题描述】:

我刚开始尝试了解 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)作为我的复选框的事件“OnCheckedChange”的订阅者。不幸的是,我不知道何时何地调用这个过程,因为它必须得到参数对象,对吧? 到目前为止,该过程只“知道”参数应该是哪种类型。 我认真地试图弄清楚这一点,但一两个小时没有取得任何进展。 因此,如果有人能帮助我,我将不胜感激。

【问题讨论】:

    标签: java android observer-pattern


    【解决方案1】:

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

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

    请注意您在发布的代码中覆盖的 onCreate() 方法。这与创建Activity 对象时系统调用的类似。在您自己的代码中,您不会在 Activity 对象上调用 onCreate(),这是一个回调,供您覆盖和添加代码。

    【讨论】:

      猜你喜欢
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2022-11-07
      相关资源
      最近更新 更多