Не удалось найти средство доступа при привязке LiveData в XML - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь привязать LiveData<Result<String>> к TextView, используя привязку данных. «Результат» - это запечатанный класс, используемый для переноса моего ответа из источника данных.

Но независимо от того, что я делаю, я получаю эту ошибку:

Не удалось найти средство доступа com.saiful .gotravel.domain.Result.data

Result.kt

sealed class Result<out R> {

data class Success<out T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>()
object Loading : Result<Nothing>()

override fun toString(): String {
    return when (this) {
        is Success<*> -> "Success[data=$data]"
        is Error -> "Error[exception=$exception]"
        Loading -> "Loading"
    }
}
}

SearchUseCase.kt

class SearchUseCase @Inject constructor():UseCase<String, String> (){
override suspend fun invoke(params: String): LiveData<Result<String>> {
    return withContext(Dispatchers.Main){MutableLiveData<Result<String>>().apply { value =Result.Success("Successful Search Result") }}
}
}

SearchViewModel.kt

class SearchViewModel @Inject constructor(searchUseCase: SearchUseCase) : ViewModel() {
val text:LiveData<Result<String>> = liveData (Dispatchers.IO){
    //Returns a  LiveData<Result<String>>
    emitSource(searchUseCase("This is a LiveData string"))
}}

SearchFragment.kt

class SearchFragment : DaggerFragment() {

@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory

private lateinit var binding: FragmentSearchBinding

private val viewModel by viewModels<SearchViewModel> { viewModelFactory }

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {


    binding = FragmentSearchBinding.inflate(inflater, container, false).apply {
        lifecycleOwner = viewLifecycleOwner
        vm = viewModel
    }
    return binding.root
}}

XML

    <?xml version="1.0" encoding="utf-8"?>
<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="vm"
            type="com.saiful.gotravel.ui.search.SearchViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ui.search.SearchFragment">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{vm.text.data}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

Может кто-нибудь помочь мне выяснить, что я делаю не так?

...