Kotlin Android - 从片段复制到剪贴板

Kotlin Android - Copy to Clipboard from Fragment

我需要将文本复制到剪贴板,所以我使用了在 MainActivity:

中已经使用过的代码
 val myClipboard: ClipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
 val myClip: ClipData

问题是,此代码在 Activity 上运行良好,但(显然)在 Fragment 上运行不正常。

getSystemService 上:

Type inference failed: fun getSystemService(p0: Context, p1: Class): T? cannot be applied to (String)

CLIPBOARD_SERVICE 上:

Type mismatch: inferred type is String but Context was expected

我试过

getSystemService(context!!, CLIPBOARD_SERVICE)

但不起作用

当您的 class 是片段时,您可以通过在 Java 中调用 getActivity() 或在 Kotlin 中调用 activity 来获取对其父级 Activity 的引用.

使用这种方法,您可以将 Activity 中的代码更改为

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

在 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)

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

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

编码愉快!