繁体   English   中英

如何在 ViewModel 的 LiveData 对象的活动观察调用中为 ActionBar 执行 setTitle()?

[英]How to execute setTitle() for an ActionBar in an activity's observe call for a ViewModel's LiveData object?

在活动文件中,当我在视图模型的LiveData值的实例化观察者界面中编写getSupportActionBar().setTitle(...)时,操作栏的标题不会随着可观察的更新而改变。

我的活动文件中onCreate方法内的工具栏设置:

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

mViewModel.getValue().observe(this, mValue -> getSupportActionBar().setTitle(mValue));

我的视图模型中mValue的字段定义和getter代码:

protected MutableLiveData<String> mValue = new MutableLiveData();
public LiveData<String> getValue() {
    return mValue;
}

澄清一下,正如预期的那样,observable 的值(例如mValue )正在传递给活动文件中的 lambda 观察者。 并且setSupportActionBar().setTitle()在正常调用时按预期工作,即在 lambda 观察者之外,也按预期工作。

我找到了一个解决方案(感谢user1506104 )来改变工具栏的标题,它没有使用getSupportActionBar().setTitle()

CollapsingToolbarLayout toolbarLayout = findViewById(R.id.toolbar_layout);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

mViewModel.getValue().observe(this, mValue -> {
    toolbarLayout.setTitle(mValue);
});

其中R.id.toolbar_layout是在活动的相应布局资源中作为R.id.toolbarR.id.toolbarCollapsingToolbarLayout

我不知道为什么它很不幸。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM