剪贴板中的 null
null from Clipboard
我需要从剪贴板中获取复制的数据。我使用此代码:
val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
val clipData: ClipData? = clipboardManager.primaryClip
clipData?.let { textView.text = clipData.getItemAt(0).text }
如果我在 onCreate()
或 onResume()
回调中使用此代码,我总是从剪贴板中获取 null。
但是如果我调用这段代码:
textView.post {
val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
val clipData: ClipData? = clipboardManager.primaryClip
clipData?.let { textView.text = clipData.getItemAt(0).text }
}
我得到了复制的字符串。
所以,我得出结论,剪贴板会等到所有视图都呈现完。
为什么剪贴板需要等待渲染所有视图?或者剪贴板可能正在等待其他东西
发生这种情况是因为当您尝试从剪贴板获取 primaryClip
时,您的应用应该处于焦点位置。
所有视图都必须设置并绑定到 activity,这就是为什么您必须在 view.post { }
的帮助下将函数添加到 UI 队列
该更改是在 API 29 中添加的
https://developer.android.com/about/versions/10/privacy/changes#clipboard-data
我需要从剪贴板中获取复制的数据。我使用此代码:
val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
val clipData: ClipData? = clipboardManager.primaryClip
clipData?.let { textView.text = clipData.getItemAt(0).text }
如果我在 onCreate()
或 onResume()
回调中使用此代码,我总是从剪贴板中获取 null。
但是如果我调用这段代码:
textView.post {
val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
val clipData: ClipData? = clipboardManager.primaryClip
clipData?.let { textView.text = clipData.getItemAt(0).text }
}
我得到了复制的字符串。
所以,我得出结论,剪贴板会等到所有视图都呈现完。
为什么剪贴板需要等待渲染所有视图?或者剪贴板可能正在等待其他东西
发生这种情况是因为当您尝试从剪贴板获取 primaryClip
时,您的应用应该处于焦点位置。
所有视图都必须设置并绑定到 activity,这就是为什么您必须在 view.post { }
该更改是在 API 29 中添加的 https://developer.android.com/about/versions/10/privacy/changes#clipboard-data