You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中activity?.语法含义及MainActivity内该写法标红解决方法

问题原因

官方文档给出的doPhotoPrint()示例代码默认使用场景是Fragment:只有Fragment类自带可空的activity属性,用来获取当前Fragment依附的Activity实例。
你把这段代码直接复制到MainActivity(Activity子类)中时,Activity类本身不存在activity这个成员变量,编译器找不到对应的属性引用,就会持续显示红色报错。

修复方案

根据你放置代码的场景二选一调整即可:

场景1:代码写在Activity(比如你的MainActivity)中

直接把代码里所有activity?.替换为this即可——当前类本身就是Activity实例,可以直接作为PrintHelper的上下文参数传入。

注意:不要传Application类型的上下文给PrintHelper,否则无法正常拉起系统打印选择弹窗。

适配Activity场景的完整可运行代码如下:

private fun doPhotoPrint(printBitmap: Bitmap) {
    // 传入当前Activity实例作为上下文
    val printHelper = PrintHelper(this).apply {
        // 配置图片缩放模式,可选SCALE_MODE_FIT / SCALE_MODE_FILL
        scaleMode = PrintHelper.SCALE_MODE_FIT
    }
    // 第一个参数为打印任务名称,会显示在系统打印队列中
    printHelper.printBitmap("我的照片打印任务", printBitmap)
}

将该方法绑定到界面上的打印按钮点击事件,传入需要打印的Bitmap对象,调用后即可正常弹出系统打印选项界面,供用户选择打印机、调整打印参数完成打印。整个打印流程由系统打印服务接管,不需要额外申请权限。

场景2:代码确实需要写在Fragment中

如果是在Fragment中编写这段代码出现activity?.报红,先检查模块级build.gradle文件是否引入了AndroidX Fragment的Ktx依赖:

dependencies {
    implementation("androidx.fragment:fragment-ktx:1.6.2") // 版本号可替换为当前最新稳定版
}

同时注意调用doPhotoPrint()的时机要在Fragment的onAttach()生命周期之后,避免activity为空调用异常。

内容的提问来源于stack exchange,提问作者Londrinho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:54:17