我在科特林遇到了一件很奇怪的事情。我有
var myClipboard = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager?
var myClip: ClipData? = ClipData.newPlainText( /* my code */ )
Run Code Online (Sandbox Code Playgroud)
作为var变量,我应该能够重新分配他的价值,但是当我这样做时
myClipboard?.primaryClip = myClip
Run Code Online (Sandbox Code Playgroud)
它给我错误
Val无法重新分配
最奇怪的是,我几个星期都在使用此代码,并且始终有效。当我更新到API 29时,它今天停止工作
这是我的 build.gradle android{}
android {
compileSdkVersion 29
defaultConfig {
applicationId "com.arfmann.pushnotes"
minSdkVersion 23
targetSdkVersion 29
versionCode 16
versionName "1.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 10
像这样使用它
val clipboard = ctx.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("Beacon infos", it.toJson())
clipboard.setPrimaryClip(clip)
Run Code Online (Sandbox Code Playgroud)
随着中所看到的ClipboardManager文件,getPrimaryClip返回ClipData?(即,可为空ClipData),同时setPrimaryClip()需要一个ClipData-一个非空ClipData。
var当类型不同(且可空性是Kotlin输入的重要组成部分)时,Kotlin不支持属性访问,因此,val当您调用时,Kotlin仅能有效地给您等效的属性primaryClip。
setPrimaryClip在API 29中添加了可空性注释,这就是为什么在升级时行为会有所不同的原因compileSdkVersion。
要设置主剪辑,您必须显式使用setPrimaryClip()非空值,ClipData或者在API 28+上使用clearPrimaryClip()来完全清除主剪辑。
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |