kotlin ViewBinding无法与Intent.putExtra一起使用

e0uiprwp  于 2023-10-23  发布在  Kotlin
关注(0)|答案(2)|浏览(118)

我是新来的看约束力。如果我使用findViewById并使用intent的putExtra传递数据字符串data,一切都正常。但它不适用于视图绑定。

class MainActivity : AppCompatActivity() {

    companion object{
        const val camlinOrderKey = "com.example.mk_order.MainActivity.camlinOrderKey"
        const val flairOrderKey = "com.example.mk_order.MainActivity.flairOrderKey"
    }


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var binding: ActivityMainBinding
        binding = ActivityMainBinding.inflate(layoutInflater)

        val eT1 = findViewById<EditText>(R.id.eT1)
        // val eT2 = findViewById<EditText>(R.id.eT2)
        val btnOrder = findViewById<Button>(R.id.btnOrder)

        btnOrder.setOnClickListener {
            val reviewIntent = Intent(this, ReviewOrder::class.java)

            val camlinOrder = eT1.text.toString()
            val flairOrder = binding.eT2.text.toString()

            reviewIntent.putExtra(camlinOrderKey, camlinOrder)
            reviewIntent.putExtra(flairOrderKey, flairOrder)

            startActivity(reviewIntent)
        }
    }
}

eT1显示新活动的数据,但eT2为空。没有错误。eT2是空的。你能帮我找出错误吗?

0dxa2lsx

0dxa2lsx1#

发生此问题的原因是您没有将binding.root传递给Activity的setContentView方法,并且binding对象没有引用Activity布局中的视图。
根据view binding documentation
要设置绑定类的示例以供Activity使用,请在Activity的onCreate()方法中执行以下步骤:
1.调用生成的绑定类中包含的静态inflate()方法。这将创建绑定类的示例供Activity使用。
1.通过调用getRoot()方法或使用Kotlin属性语法获取对根视图的引用。
1.将根视图传递给setContentView(),使其成为屏幕上的活动视图。
你应该把你的代码改成这样:

class MainActivity : AppCompatActivity() {

companion object{
    const val camlinOrderKey = "com.example.mk_order.MainActivity.camlinOrderKey"
    const val flairOrderKey = "com.example.mk_order.MainActivity.flairOrderKey"
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    var binding: ActivityMainBinding
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
    binding.btnOrder.setOnClickListener {
        val reviewIntent = Intent(this, ReviewOrder::class.java)
        val camlinOrder = binding.eT1.text.toString()
        val flairOrder = binding.eT2.text.toString()
        reviewIntent.putExtra(camlinOrderKey, camlinOrder)
        reviewIntent.putExtra(flairOrderKey, flairOrder)
        startActivity(reviewIntent)
    }
}}
hs1ihplo

hs1ihplo2#

您必须将根视图传递给setContentView(),使其成为屏幕上的活动视图。ViewBinding | Android
而不是setContentView(R.layout.activity_main)使用此setContentView(binding.root)

相关问题