setOnClickListener source - RuntimeException(“Stub!”)

时间:2016-10-30 05:44:58

标签: android button

我在onCreate中有这个:

    mTrueButton = (Button) findViewById(R.id.true_button);
    mTrueButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            checkAnswer(true);
        }
    });

此方法在Android API中定义如下:

public void setOnClickListener(View.OnClickListener l) {
        throw new RuntimeException("Stub!");
    }

据我所知,我们在这里创建了一个匿名类,以便从View.OnClickListener接口实现onClick()。

但是我很困惑这种方法究竟做了什么;它没有返回任何东西,也没有改变任何东西,只是抛出和异常所以为什么我们在这里呢?

感谢。

1 个答案:

答案 0 :(得分:2)

您正在查看的源代码是SDK中的反编译类,因为您没有在项目中设置目标API的来源。

查看实际代码:

  • 打开SDK管理器
  • 下载您已设置为项目目标的API版本的 Android SDK来源
  • 尝试再次查看代码

以下是我在API 23源代码中可以看到的内容:

/**
 * Register a callback to be invoked when this view is clicked. If this view is not
 * clickable, it becomes clickable.
 *
 * @param l The callback that will run
 *
 * @see #setClickable(boolean)
 */
public void setOnClickListener(@Nullable OnClickListener l) {
    if (!isClickable()) {
        setClickable(true);
    }
    getListenerInfo().mOnClickListener = l;
}