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"