Android Kotlin 进度条成为未解决的引用
Android Kotlin Progress Bar become unresolved reference
我是在 Android Studio 中使用 Kotlin 的新手,我尝试按照 YouTube 上的简单教程学习如何使用进度条。但是,由于某种原因,MainActivity.kt 中 progressBar.max 上的“progressBar”被定义为未解析的引用,尽管我的代码与视频中的人相同。
This is activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="335dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:scaleY="10" />
</RelativeLayout>
This is MainActivity.kt
package com.example.game1
import android.animation.ObjectAnimator
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
progressBar.max=10
val currentProgress = 6
ObjectAnimator.ofInt(progressBar, propertyName: "progress", currentProgress)
.setDuration(2000)
.start()
}
}
您应该从 xml 中获取 ProgressBar
的实例,即
findViewById(R.id.progressBar)
完整代码
class MainActivity : AppCompatActivity() {
lateinit var progressBar : ProgressBar
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
progressBar = findViewById(R.id.progressBar)
progressBar.max=10
val currentProgress = 6
ObjectAnimator.ofInt(progressBar, propertyName: "progress", currentProgress)
.setDuration(2000)
.start()
}
}
您也可以使用视图绑定来摆脱 findViewById
您好像看过一个教程,其中有人使用 Kotlin 合成器从代码中访问视图。它们现在已被弃用,我建议您使用 Muhammad Ahmed 解决方案或 View Binding
在模块的 build.gradle 中找到这段代码:
android {
compileSdk 31
...
}
现在添加视图绑定构建功能,它应该如下所示:
android {
compileSdk 31
buildFeatures {
viewBinding = true
}
...
}
进行更改后,顶部应该会出现一个蓝色条。同步您的项目,现在它支持视图绑定。
您的 MainActivity.kt 应如下所示:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding // name of your layout in camelcase
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.progressBar.max = 10
}
}
如何使用视图绑定访问视图?使用驼峰命名法。例如,如果您的 TextView 的 id 为“tv_list_description”,则可以通过如下代码访问它:
binding.tvListDescription.text = "Sample text"
我是在 Android Studio 中使用 Kotlin 的新手,我尝试按照 YouTube 上的简单教程学习如何使用进度条。但是,由于某种原因,MainActivity.kt 中 progressBar.max 上的“progressBar”被定义为未解析的引用,尽管我的代码与视频中的人相同。
This is activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="335dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:scaleY="10" />
</RelativeLayout>
This is MainActivity.kt
package com.example.game1
import android.animation.ObjectAnimator
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
progressBar.max=10
val currentProgress = 6
ObjectAnimator.ofInt(progressBar, propertyName: "progress", currentProgress)
.setDuration(2000)
.start()
}
}
您应该从 xml 中获取 ProgressBar
的实例,即
findViewById(R.id.progressBar)
完整代码
class MainActivity : AppCompatActivity() {
lateinit var progressBar : ProgressBar
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
progressBar = findViewById(R.id.progressBar)
progressBar.max=10
val currentProgress = 6
ObjectAnimator.ofInt(progressBar, propertyName: "progress", currentProgress)
.setDuration(2000)
.start()
}
}
您也可以使用视图绑定来摆脱 findViewById
您好像看过一个教程,其中有人使用 Kotlin 合成器从代码中访问视图。它们现在已被弃用,我建议您使用 Muhammad Ahmed 解决方案或 View Binding
在模块的 build.gradle 中找到这段代码:
android {
compileSdk 31
...
}
现在添加视图绑定构建功能,它应该如下所示:
android {
compileSdk 31
buildFeatures {
viewBinding = true
}
...
}
进行更改后,顶部应该会出现一个蓝色条。同步您的项目,现在它支持视图绑定。
您的 MainActivity.kt 应如下所示:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding // name of your layout in camelcase
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.progressBar.max = 10
}
}
如何使用视图绑定访问视图?使用驼峰命名法。例如,如果您的 TextView 的 id 为“tv_list_description”,则可以通过如下代码访问它:
binding.tvListDescription.text = "Sample text"