当前位置: 首页 > 知识库问答 >
问题:

Kotlin/迁移到视图绑定

傅新
2023-03-14

我一直在关注YT视频制作测验应用程序,但最终我在绑定时遇到了这个错误:

  • “kotlin android extensions”Gradle插件已被弃用
  • 请使用本迁移指南(https://goo.gle/kotlin-android-extensions-deprecation)开始使用视图绑定的步骤(https://developer.android.com/topic/libraries/view-binding)和“kotlin parcelize”插件

但是,当我添加绑定例如tv_name.text,我得到错误的文本是期待变量和一切与其他绑定部分相同。

库部件

import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat
import com.example.quizapp.databinding.ActivityResultBinding

代码部分

    class ResultActivity : AppCompatActivity() {

    private val binding by viewBinding(FragmentResultActivity::bind)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_result)

        // Hide the status bar.
        //window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN

        val userName = intent.getStringExtra(Constants.USER_NAME)
        binding.tv_name.text = userName

        val totalQuestions = intent.getIntExtra(Constants.TOTAL_QUESTIONS, 0)
        val correctAnswers = intent.getIntExtra(Constants.CORRECT_ANSWERS, 0)

        binding.tv_score.text = "Your Score is $correctAnswers out of $totalQuestions."

        binding.btn_finish.setOnClickListener {
            startActivity(Intent(this@ResultActivity, MainActivity::class.java))
        }
      }
   }

共有2个答案

索瀚海
2023-03-14

首先,你需要让android知道你正在使用视图绑定。所以去“Gradle Scricript”文件夹并打开应用程序级别build.gradle(模块:nameOfProject)文件和里面的android属性添加这个:

android {

// ------ VIEW BINDING SETTING ------
// this creates the binding object
buildFeatures{
    viewBinding true
}
// after set up, click on  "Sync Now"
}

然后在main活动中。kt:

class MainActivity : AppCompatActivity() {
    // Initialize binding object. if ActivityMainBinding is not ready in menu click "Build/Make project"
    private lateinit var binding:ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // view Bindig
//        binding default layout inflater
        binding= ActivityResultBinding.inflate(layoutInflater)
        // inflate the root views which is Linear Layout, we access with .root
        setContentView(binding.root)

        // Set click listeners
      ....
}

易风华
2023-03-14

您需要正确初始化绑定变量。请使用以下代码:

class ResultActivity : AppCompatActivity() {

    private lateinit var binding: ActivityResultBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityResultBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // Hide the status bar.
        //window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN

        val userName = intent.getStringExtra(Constants.USER_NAME)
        binding.tv_name.text = userName

        val totalQuestions = intent.getIntExtra(Constants.TOTAL_QUESTIONS, 0)
        val correctAnswers = intent.getIntExtra(Constants.CORRECT_ANSWERS, 0)

        binding.tv_score.text = "Your Score is $correctAnswers out of $totalQuestions."

        binding.btn_finish.setOnClickListener {
            startActivity(Intent(this@ResultActivity, MainActivity::class.java))
        }
      }
   } 

由于我没有您的可用资源,我认为您可能必须更改ActivityResultBinding的命名。然而,我很确定就是这样。

快乐编码!:)

 类似资料:
  • 我正在尝试在Kotlin和碎片中做视图绑定。 但是当它有很多对象的时候。我需要给它下个定义。所以我不得不看: Kotlin Android视图绑定:findViewById vs Butternife vs Kotlin Android扩展 和 但是我在Android Studio中找不到 我可以在我的程序中做什么?

  • 我正试图找出在Kotlin中进行Android视图绑定的最佳方法。似乎有几个选择: 我对java中的findViewById和Butternife非常熟悉,但是在Kotlin中,每种视图绑定方法的优缺点是什么? Kotlin Android扩展能很好地使用RecycerView+ViewHolder模式吗? 另外,Kotlin Android扩展如何通过处理嵌套视图的视图绑定?

  • Angular 是使用 TypeScript 构建的,并且支持向 Angular 提供元信息的装饰器。 TypeScript 的装饰器会让语法感觉更加“自然”,尽管有可能使用 Angular 没有的功能。

  • 我正在使用Kotlin Android Extensions中的视图绑定: 我该如何避免这种情况? 当然,我可以使用但是 > 有一天我会忘记把

  • Redux 不是一个单一的框架,而是一系列的约定和一些让他们协同工作的函数。你的 Redux 项目的主体代码甚至不需要使用 Redux 的 API,大部分时间你其实是在编写函数。 这让到 Redux 的双向迁移都非常的容易。 我们可不想把你限制得死死的! 从 Flux 项目迁移 Reducer 抓住了 Flux Store 的本质,因此,将一个 Flux 项目逐步到 Redux 是可行的,无论你使

  • 我正试图迁移到AndroidX,我们在我们的项目中使用这个库。然而,这目前在我们的项目中引起了一个问题: 无法解析对“module @ build type/compile class path”的依赖项:无法使用转换JetifyTransform转换文件“localytics-1.3.0.aar”以匹配属性{artifactType=processed-aar} 删除库会使此问题消失。在这个库被