android - 在 Activity 和 Fragment 之间使用共享视图模型,但 UI 上没有更新
问题描述
我正在做一个注册过程,它分为三个步骤,所以我在所有三个片段和注册活动之间使用共享视图模型。我想要做的是在我加载下一个片段后,我进行了一些 UI 更新以显示另一个工具栏,正在工作的是替换片段,他成功地加入了更新 UI 方法,但在 UI 上没有进行任何更改
override fun navigateToSignUp() {
setFragment(
R.id.home_frame,
SignUpFragment()
)
showTitleInToolbarBackParam("Register", true)
}
private fun showTitleInToolbarBackParam(title: String, back: Boolean) {
Log.e(TAG, "showTitleInToolbarBackParam: ")
getDataBinding()!!.appbar.toolbar.visibility = VISIBLE
getDataBinding()!!.homeappbar.homeappbar.visibility = GONE
getDataBinding()!!.appbar.titleTextView.text = title
if (back)
getDataBinding()!!.appbar.backImageView.visibility = VISIBLE
else
getDataBinding()!!.appbar.backImageView.visibility = GONE
}
class SignUpFragment : BaseFragment<FragmentSignUpBinding>() {
private lateinit var viewModel: WelcomingViewModel
override fun setViewModel() {
viewModel = activity.run {
ViewModelProviders.of(this!!).get(WelcomingViewModel::class.java)
}
}
override fun init() {
getDataBinding().viewModel = viewModel
}
override fun getLayoutId(): Int {
return R.layout.fragment_sign_up
}
}
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.itchek.presentation.welcoming.WelcomingViewModel" />
</data>
在 XML 文件中所有片段的绑定中,我使用了相同的视图模型
解决方案
膨胀片段的现代方式是导航。使用 addOnDestinationChangedListener() 函数更改工具栏的标题或可见性。
val navController = findNavController(R.id.nav_host_fragment)
navController.addOnDestinationChangedListener { _, destination, _ ->
when (destination.id) {
R.id.navigation_list -> {
navBar.visibility = View.GONE
supportActionBar!!.title = "List"
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
}
R.id.navigation_select -> {
navBar.visibility = View.GONE
supportActionBar!!.title = "Select"
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
}
else -> {
navBar.visibility = View.VISIBLE
supportActionBar!!.title = getString(R.string.app_name)
supportActionBar!!.setDisplayHomeAsUpEnabled(false)
}
}
}
推荐阅读
- highcharts - 区域内的Highcharts小柱
- python - 如何在这个 for 循环中使用 subplot 在单个图中显示多张图片?
- twitter-bootstrap - 默认情况下,如何在 bootstrap datetimepicker 中将时间设置为 PM?
- javascript - 使用 xlsx 库和 SST 导出到 excel
- android - 我们可以为应用程序图标提供 Android 暗模式支持吗?
- ansible - 我尝试在 when 语句中使用“with_items”但失败了
- javascript - 保持图像的 3D 立方体在同一侧继续过渡
- python-3.x - 如何将烧瓶聊天应用程序与 dialogflow 版本 2 API 连接起来
- agda - 标准库中有关联列表吗?
- java - Maven 项目中未加载 CSS 文件