KotlinAndroid -从片段复制到剪贴板

fiei3ece  于 2023-03-06  发布在  Android
关注(0)|答案(4)|浏览(283)

我需要复制文本到剪贴板,所以我使用了一个代码,我已经在MainActivity中使用:

val myClipboard: ClipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
 val myClip: ClipData

问题是,这段代码在Activity上运行良好,但在Fragment上却不行(显然)。
getSystemService上:
类型推断失败:fun获取系统服务(p0:背景,p1:类):T?不能应用于(字符串)
CLIPBOARD_SERVICE上:
类型不匹配:推断类型为String,但应为Context
我试过
getSystemService(context!!, CLIPBOARD_SERVICE)
但不起作用

qoefvg9y

qoefvg9y1#

当类是一个片段时,您可以通过调用Java中的getActivity()或Kotlin中的activity来获取其父Activity的引用。
使用此方法,您可以将“活动”中的代码更改为

val myClipboard: ClipboardManager = activity.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
val myClip: ClipData
vddsk6oq

vddsk6oq2#

在Kotlin中对上下文使用强制展开(!!)不是一个好主意。在你的fragment类中你可以使用下面的代码,这对任何NPE都是安全的,而且非常干净。

(requireActivity().getSystemService(CLIPBOARD_SERVICE) as ClipboardManager).apply {
        setPrimaryClip(ClipData.newPlainText("simple text", "some other text"))
    }

快乐编码!

piok6c0g

piok6c0g3#

在android x中getSystemService()的构造函数发生了变化。现在你必须像这样调用剪贴板(你可以使用activity!!context!!

var myClipboard = getSystemService(context!!, ClipboardManager::class.java) as ClipboardManager
val clip: ClipData = ClipData.newPlainText("simple text", text)

myClipboard.setPrimaryClip(clip)
rggaifut

rggaifut4#

下面是Kotlin用户的一个有趣的扩展:

fun Fragment.copyToClipboard(text: String, label: String? = null) {
    (requireActivity().getSystemService(CLIPBOARD_SERVICE) as ClipboardManager).apply {
        setPrimaryClip(ClipData.newPlainText(null, text))
    }
    displayToast(R.string.text_copied_to_clipboard, Toast.LENGTH_LONG)
}

相关问题