Использование модели общего представления между Activity и Fragment, но пользовательский интерфейс не обновляется - PullRequest
0 голосов
/ 16 июня 2020

Я выполняю процедуру регистрации, которая разделена на три этапа, поэтому я использую модель общего представления для всех трех фрагментов и активности регистрации. Что я хочу сделать, так это после загрузки следующего фрагмента я делаю некоторые обновления пользовательского интерфейса, чтобы показать другую панель инструментов, работает замена фрагмента, и он успешно принимает метод обновления пользовательского интерфейса, но никаких изменений в пользовательском интерфейсе не вносится


    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 я использовал ту же модель представления

Это модуль, который у меня была проблема

1 Ответ

0 голосов
/ 16 июня 2020

Современный способ накачивания фрагментов - навигация . Используйте функцию 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)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...