【问题标题】:setOnClickListener source - RuntimeException("Stub!")setOnClickListener 源 - RuntimeException("Stub!")
【发布时间】:2019-06-04 07:08:04
【问题描述】:

我在 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()。

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

谢谢。

【问题讨论】:

标签: android button


【解决方案1】:

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

查看实际代码:

  • 打开您的 SDK 管理器
  • 下载您已设置为项目目标的 API 版本的 Sources for 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;
}

【讨论】:

    猜你喜欢
    • 2017-07-07
    • 2015-02-23
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多