MVVM без привязки данных - PullRequest
0 голосов
/ 30 ноября 2018

Я начал изучать Kotlin для разработки приложений для Android, и для моего первого проекта я должен использовать MVVM в качестве шаблона, чтобы отделить уровень представления от логики.Все статьи, которые я нашел о MVVM, используют библиотеку DataBinding для привязки данных моделей непосредственно к представлениям xml.Я немного работал с DataBinding в Java, но мне это не нравится, потому что очень трудно найти ошибки, когда привязка неверна.У меня вопрос, есть ли другой способ использовать MVVM без DataBinding?

1 Ответ

0 голосов
/ 30 ноября 2018

Конечно, это так.Просто абстрактный пример: представьте себе ViewModel:

class SomeViewModel : ViewModel() {

    private lateinit var roadmap: RoleScreenRoadmap
    private lateinit var uiScope: CoroutineScope

    private val _nameRequired = MutableLiveData<Boolean>()
    private val _userName = MutableLiveData<String>()

    val nameRequired: LiveData<Boolean>
        get() = _nameRequired
    val userName: LiveData<String>
        get() = _userName

    ...
}

А теперь Activity:

class AbstractActivity : AppCompatActivity() {

    private lateinit var viewModel: RoleScreenViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_some)
        initializeDependencies()
        performBindings()
    }

    private fun initializeDependencies() {
        viewModel = ViewModelProviders.of(this).get(AbstractViewModel::class.java)
    }



    private fun performBindings() {
        val lifecycle = ::getLifecycle
        viewModel.nameRequired.observe(lifecycle) { nameRequired: Boolean? ->
            if (nameRequired!!) {
                showNameInputWindow()
            }
        }
        viewModel.userName.observe(lifecycle, ::setTitle)
    }

    ...
}

Вы можете просто подписаться во время инициализации компонента жизненного цикла андроида, и привязка данных не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...