【问题标题】:Understanding the lifecycle of DataBinding了解 DataBinding 的生命周期
【发布时间】:2019-02-20 22:14:39
【问题描述】:

我的活动:

class PlayerDetails : AppCompatActivity(), View.OnClickListener {

    private lateinit var binding: ActivityPlayerDetailsBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_player_details)

    }

我正在尝试了解数据绑定过程是如何工作的,我是这样理解的:

  • private lateinit var binding: ActivityPlayerDetailsBinding 实例化 ViewDataBinding 对象。
  • binding = DataBindingUtil.setContentView(this, R.layout.activity_player_details) 分为两部分:

    1. DataBindingUtil.setContentView(this, R.layout.activity_player_details) 将内容视图设置为给定的布局
    2. 然后它将绑定对象返回给binding variable (binding = ...),然后可以使用该对象访问布局中的视图。

这是描述代码如何工作的准确方式吗?我发现DataBindingUtil.java 的源代码很难理解。主要是因为 setContentView() 被调用,尽管它似乎被分配了 binding = ...

【问题讨论】:

    标签: java android data-binding


    【解决方案1】:

    DataBindingUtil.setContentView(this, R.layout.activity_player_datails) 做几乎相同的事情来返回绑定对象。虽然DataBindingUtils.setContentView 在返回之前调用了activity.setContentView

    相反,我通常会覆盖 setContentView 以确保将绑定对象分配给变量并将内容设置为给定的布局。

    override fun setContentView(layoutResID: Int) {
            binding = DataBindingUtil.inflate(LayoutInflater.from(context), layoutResID, null, false)
            super.setContentView(mBinding.root)
    }
    

    【讨论】:

    • 谢谢,但我仍然不明白如何在作业中调用 setContentView() (binding = ...)
    • 你的意思是'DatabindUtils.setContentView()`?如果是,他们在内部调用了 activity.setContentVeiw() 。你应该检查这个code
    猜你喜欢
    • 2021-01-03
    • 2019-04-17
    • 1970-01-01
    • 2018-11-27
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多