【问题标题】:How to access Activitie's binding in Fragment?如何在 Fragment 中访问 Activity 的绑定?
【发布时间】:2020-07-02 20:26:22
【问题描述】:

这是我在 main_activity.xml 中的工具栏

<androidx.appcompat.widget.Toolbar
            app:title="@{viewModel.title}"
            android:id="@+id/myToolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:elevation="4dp"
            android:theme="@style/AppTheme"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

这是 ActivityMainViewModel:

class ActivityMainViewModel:ViewModel() {
        
        private val _title = MutableLiveData<String>()
        val title: LiveData<String>
        get() = _title

    init {
        _title.value = "First Value"
    }

    fun setTitle(newTitle: String){
        _title.value = newTitle
    }
}

在我的 Fragment 中,我调用了 setTitle() 方法,但 UI 中工具栏的标题没有改变:

val activityMainViewModel = ViewModelProvider(requireActivity()).get(ActivityMainViewModel::class.java)
activityMainViewModel.setTitle("I want change!")

我认为我需要一个 MainActivity 的绑定实例。 如何获得?

【问题讨论】:

    标签: android kotlin data-binding viewmodel android-viewmodel


    【解决方案1】:

    你会这样做:

    片段

    (activity as YourActivity).supportActionBar?.title = getString(R.string.your_title)
    

    活动中:

    setSupportActionBar(toolbar)
    supportActionBar?.setDisplayHomeAsUpEnabled(true)
    supportActionBar?.setDisplayShowHomeEnabled(true)
    

    【讨论】:

    • 我知道。我正在寻找使用 DataBinding 的解决方案。谢谢。
    【解决方案2】:

    在您的片段中,您的调用应该是这样的:

    activityMainViewModel.title.postValue("I want change!")
    

    在您的视图模型类中,您的方法 setTitle 没有意义,您可以将其删除(如果需要)

    【讨论】:

    • 你的代码和我的一样。但是我封装了title属性。没用。
    • 您是否在片段中设置了绑定变量? binding.setVariable(BR.viewModel, viewModel)
    【解决方案3】:

    首先,您需要设置内容视图:

    ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    

    然后设置工具栏:

    Toolbar toolbar = findViewById(R.id.myToolbar);
    setSupportActionBar(activityMainBinding.toolbar);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多