ObservableField取值为空?Android数据绑定问题求助
问题原因及修复方案
你的代码存在两个关键问题,导致无法获取EditText的输入值:
重复调用setContentView破坏绑定:使用
DataBindingUtil.setContentView已经完成了布局加载和绑定初始化,但后续调用setContentView(binding.root)会重新加载布局,直接覆盖之前的数据绑定关系,使得EditText的内容无法同步到editTextValue。未绑定布局变量实例:布局中定义了
activity变量,但你没有将当前Activity实例赋值给binding.activity,导致双向绑定表达式@={activity.editTextValue}无法关联到你声明的editTextValue字段。
修复后的MainActivity代码
class MainActivity : AppCompatActivity() { var editTextValue = ObservableField<String>("") private lateinit var binding: ActivityMainBinding private lateinit var chatViewModel: ChatViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 仅用DataBindingUtil完成布局加载,不需要再调用setContentView binding = DataBindingUtil.setContentView(this, R.layout.activity_main) // 将当前Activity实例赋值给布局中的activity变量 binding.activity = this binding.sendButton.setOnClickListener { val inputValue = editTextValue.get().orEmpty() println("$inputValue ABC") if(inputValue.isEmpty()){ println("WHY IS EMPTY") return@setOnClickListener } // 这里可以继续处理非空的输入值 } } }
补充说明
- 移除重复的
setContentView(binding.root),保留DataBindingUtil.setContentView的调用即可完成布局与绑定的初始化。 - 通过
binding.activity = this建立布局变量与Activity实例的关联,双向绑定才能正常工作,EditText的输入会自动同步到editTextValue中。 - 使用
orEmpty()替代!!可以避免空指针异常,让代码更安全。
内容的提问来源于stack exchange,提问作者Ashish
相关产品推荐
相关产品推荐

