ViewBinding 不适用于 Intent.putExtra

ViewBinding not working with Intent.putExtra

提问人:Puneet Chhabra 提问时间:10/8/2023 更新时间:10/8/2023 访问量:50

问:

我是查看绑定的新手。如果我使用 findViewById 并使用 intent 的 putExtra 传递数据字符串数据,则一切正常。但它不适用于视图绑定。


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 为空。你能帮我找到错误吗?

android kotlin 意图 android-viewbinding

评论


答:

4赞 mohammad.hasan.mahdavi81 10/8/2023 #1

出现此问题的原因是,您没有将 binding.root 传递给活动的 setContentView 方法,并且绑定对象没有对活动布局中的视图的引用。

根据视图绑定文档

若要设置绑定类的实例以用于活动,请在活动的 onCreate() 方法中执行以下步骤:

  1. 调用生成的绑定类中包含的静态 inflate() 方法。这将创建绑定类的实例,供活动使用。
  2. 通过调用 getRoot() 方法或使用 Kotlin 属性语法来获取对根视图的引用。
  3. 将根视图传递给 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)
    }
}}
1赞 404NotFound 10/8/2023 #2

您必须将根视图传递给,以使其成为屏幕上的活动视图。视图绑定 |人造人setContentView()

而不是使用这个setContentView(R.layout.activity_main)setContentView(binding.root)