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"))
}
编码愉快!
我需要将文本复制到剪贴板,所以我使用了在 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"))
}
编码愉快!