提问人:Puneet Chhabra 提问时间:10/8/2023 更新时间:10/8/2023 访问量:50
ViewBinding 不适用于 Intent.putExtra
ViewBinding not working with Intent.putExtra
问:
我是查看绑定的新手。如果我使用 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 为空。你能帮我找到错误吗?
答:
4赞
mohammad.hasan.mahdavi81
10/8/2023
#1
出现此问题的原因是,您没有将 binding.root 传递给活动的 setContentView 方法,并且绑定对象没有对活动布局中的视图的引用。
根据视图绑定文档:
若要设置绑定类的实例以用于活动,请在活动的 onCreate() 方法中执行以下步骤:
- 调用生成的绑定类中包含的静态 inflate() 方法。这将创建绑定类的实例,供活动使用。
- 通过调用 getRoot() 方法或使用 Kotlin 属性语法来获取对根视图的引用。
- 将根视图传递给 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)
评论