Android:Kotlin:自定义 webView - 无法作为函数调用。找不到函数“invoke()”

2024-04-11

我有一项活动(联系活动.kt)仅包含一个 webView 组件。使用 Kotlin 编写活动。

我想用我的自定义 webView 替换 webView (ObservableWebView.java).

所以这里的代码(我的活动.kt):

class ContactActivity : AppCompatActivity() {

        @SuppressLint("NewApi")
        override fun onCreate(savedInstanceState: Bundle?) {
            verticalLayout {
     val observableWebView = object : ObservableWebView(MainApp.getAppContext())
            observableWebView { // error here
                    setOnLongClickListener(object : View.OnLongClickListener {
                        override fun onLongClick(v: View): Boolean {
                            return true
                        }
                    })
                }
            }
       }
    }

我还有自定义 webView - ObservableWebView.java:

public class ObservableWebView extends WebView {
    private OnScrollChangedCallback mOnScrollChangedCallback;

    public ObservableWebView(final Context context) {
        super(context);
    }

    public ObservableWebView(final Context context, final AttributeSet attrs) {
        super(context, attrs);
    }

    public ObservableWebView(final Context context, final AttributeSet attrs, final int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onScrollChanged(final int l, final int t, final int oldl, final int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (mOnScrollChangedCallback != null) mOnScrollChangedCallback.onScroll(l, t);
    }

    public OnScrollChangedCallback getOnScrollChangedCallback() {
        return mOnScrollChangedCallback;
    }

    public void setOnScrollChangedCallback(final OnScrollChangedCallback onScrollChangedCallback) {
        mOnScrollChangedCallback = onScrollChangedCallback;
    }

    /**
     * Impliment in the activity/fragment/view that you want to listen to the webview
     */
    public static interface OnScrollChangedCallback {
        public void onScroll(int l, int t);
    }
}

但我得到编译错误我的活动.kt:

Error:(145, 13) Expression 'observableWebView' of type '<no name provided>' cannot be invoked as a function. The function 'invoke()' is not found

您可以使用像这样的扩展函数来扩展 Anko 以支持您的自定义视图(请参阅文档here https://github.com/Kotlin/anko/wiki/Anko-Layouts#is-it-extensible):

inline fun ViewManager.observableWebView(theme: Int = 0, init: ObservableWebView.() -> Unit): ObservableWebView {
    return ankoView({ ObservableWebView(it) }, theme, init)
}

然后创建一个并设置一个侦听器,如下所示:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    verticalLayout {
        observableWebView {
            setOnLongClickListener {
                Log.d("WEBVIEW", "on long click")
                true
            }
            onLongClick {
                Log.d("WEBVIEW", "on long click")
            }
        }
    }
}

这段代码展示了创建长按监听器的不同方法,当然您不需要两者都用。

第一种是经典的方式,它使用WebView's setOnLongClickListener函数,以及SAM转换 https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions使用 lambda 创建侦听器实例。您必须在此处返回一个布尔值来指示您是否已处理该事件,或者您希望它传播。

第二种方式,使用onLongClick是用 Anko 来实现的一种方法。多于0.10.0,这将使用协程。在这里,您无法选择返回布尔值。


或者,如果您希望能够使用observableWebView()同样,您可以创建另一个扩展来委托之前的扩展:

inline fun ViewManager.observableWebView() = observableWebView {}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:Kotlin:自定义 webView - 无法作为函数调用。找不到函数“invoke()” 的相关文章

  • 在 Android 中处理多个回收器视图 [Kotlin]

    我遇到过这样的情况 一个布局上有 3 个 RecyclerView 他们以某种方式相互依赖 数据来自房间数据库 问题原型 问题陈述 假设您有类似 Floor1 Floor2 Floor3 等 的楼层 并且每个楼层内都有类似 Room1 Ro
  • 如何创建不在 ScrollView 中或已禁用 ScrollView 的 ListView?

    我想要 ListView 中的一些好东西 例如能够使用 ListAdapter 和项目选择等 但我不想要其中的 ScrollView 部分 我想以不同的方式自己实现该部分 为什么或如何做到这一点并不是这个问题的重点 所以请不要问 为什么 有
  • Android 客户端中经过身份验证的 Cloud Endpoint 间歇性失败

    我有一个生产中的应用程序 在调用经过身份验证的云端点时收到大量强制 关闭 最能说明问题的是 java lang IllegalArgumentException 服务未注册 com google android gms internal e
  • Mac OS Flutter 构建应用程序包失败:密钥库格式无效

    自从一周以来 我一直在尝试从 flutter 应用程序创建 android 应用程序包 并且我一直遵循创建上传密钥库 https flutter dev docs deployment android给定 flutter 官方网站 在 Ma
  • 文件路径在棒棒糖android中始终返回null

    这是我从内部存储 画廊 获取图像时的代码 在棒棒糖文件路径中返回始终为空 if requestCode PICK IMAGE if resultCode RESULT OK image successfully picked launchi
  • 如何将内部类的值返回到外部类?

    我想做的是当onSuccess方法执行后 queryLogin return true 而如果onFailuer方法执行后 queryLogin return false 但如您所知 在 java 中 我无法从内部类修改外部类值 所以我只是
  • Android 谷歌地图圆圈平滑改变半径

    我想控制按进度条循环 但是谷歌地图APIsetRadius变化并不顺利 如何平滑改变圆半径 这是我的源代码 private Circle circle public void onMapReady final GoogleMap googl
  • 如何使用 Java 在 Android Wi-Fi 连接上设置 ProxySettings 和 ProxyProperties?

    如何使用 Java 以编程方式 在 Android Wi Fi 连接上设置 ProxySettings 和 ProxyProperties 由于 ipAssignment linkProperties ProxySettings 和 Pro
  • 在 Android 10 上使用 RNFetchBlob 的下载管理器 React Native 下载文件

    我需要使用 React Native 应用程序将文件下载到用户的下载目录rn 获取 blob https www npmjs com package rn fetch blob 但似乎与 Android 10 不兼容 因为我收到错误 首先我
  • 我如何访问警报内容提供商

    我正在尝试访问警报提供商以获取所有启用的警报信息 所以我写了这个 public static final Uri CONTENT URI Uri parse content com android deskclock alarm Conte
  • Android 中识别点击的图像区域?

    有没有办法在 Android 应用程序中确定用户单击了 ImageView 的哪个区域 例如 x y 坐标 谢谢 查看运动事件 http developer android com intl de reference android vie
  • SQLite 和共享首选项的优缺点[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在 SQLite 数据库和共享首选项之间存储信息的良好机制是什么 为什么要使用共享偏好设置 为什么使用sqlite 我试图找出它们之间的区别 以
  • 来自公共字符串的 Android RSA 加密

    我正在开发一个 Android 应用程序 我希望用户能够使用其他人的公钥加密消息 系统将生成公钥 私钥对 然后可以将消息秘密发送给其他用户 我正在创建一个加密类 它将处理消息的加密 解密 不幸的是我遇到了一些问题 在这种方法中 我想传递用户
  • 如何在Eclipse中配置Tesseract进行Android开发?

    我已经从事 Android 工作 6 个月了 至此我对Android开发有了基本的了解 现在我想使用 Tesseract 开发一个 OCR Android 应用程序 为此 我从 Tesseract 下载了 android ndk r6b t
  • 导入 org.ksoap2.SoapEnvelope 时遇到问题

    正在使用网络服务 从互联网上获取了一些示例代码 导入时出现一些错误 import org ksoap2 SoapEnvelope import org ksoap2 serialization SoapObject import org k
  • Marshmallow 中的手电筒控制

    我对最新 Marshmallow 版本中的相机 更具体地说是手电筒 有疑问 在任何棉花糖之前的版本上 我需要执行以下操作来打开 关闭闪光灯 private void turnFlashOn final Camera camera int f
  • 如何在Fragment之间传递数据?

    对于所有那些投反对票并投票决定关闭这个问题的人 认为它与 textview 的范围有关 然后看看 它与 textview 的范围无关 无法在片段之间传递数据 应用程序崩溃 我不知道我做错了什么 我点击了此链接http manishkpr w
  • 如何使用 Lint Option StopShip 使 Grade 发布构建失败?

    我读过很多关于StopShipAndroid Lint Check 和 Gradle 支持 http tools android com tips lint checks http tools android com tips lint c
  • gradle 构建工具版本从 1.2.3 升级到 1.3.1 的问题

    我已将 gradle 构建工具从 1 2 3 升级到 1 3 1 并开始在 gradle 同步上看到以下错误 我使用 1 2 3 版本没有任何问题 我使用的是 gradleVersion 2 3 无论如何我可以避免这个错误吗 错误 您的项目
  • ExpandableListView 和复选框

    我正在 Android 中编写简单的过滤器并想使用ExpandableListAdapter与复选框 我创建列表或检查复选框没有问题 但我真的不知道如何记住选择 关闭组并再次打开后或当我尝试打开不同的组时 复选框会发生变化 我尝试在网上阅读

随机推荐