Обновите текстовое представление с помощью функции onActivityResult объекта Autocomplete, следуя MVVM - PullRequest
2 голосов
/ 27 января 2020

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

В onCreateDialog у меня есть следующий код

binding.dialogLocationText.setOnClickListener {
    val fields =
        listOf(Place.Field.ID, Place.Field.ADDRESS, Place.Field.NAME)

    val intent = Autocomplete.IntentBuilder(
        AutocompleteActivityMode.OVERLAY, fields
    ).build(context!!)
    startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE)
}

Поскольку доступ к текстовому просмотру осуществляется через привязку данных, я не могу получить к нему доступ напрямую в onActivityResult, поэтому созданы private lateinit var dialogLocationText: TextView и dialogLocationText = binding.dialogLocationText. Затем установите текст в:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (requestCode == AUTOCOMPLETE_REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            val place = Autocomplete.getPlaceFromIntent(data!!)
            dialogLocationText.text = place.address
        }
        else if (resultCode == AutocompleteActivity.RESULT_ERROR) {
            // TODO: Handle the error.
        }
    }
}

Вышеуказанное не выглядит хорошей практикой, особенно с избыточной ссылкой на текстовое представление, и мне интересно, могу ли я по-другому конструировать, чтобы следовать MVVM.

Спасибо за помощь.

...