【问题标题】:how to take an edit text text in val from view model如何从视图模型中获取 val 中的编辑文本文本
【发布时间】:2021-05-17 10:50:47
【问题描述】:

我的视图模型中有这段代码

 class SearchViewModel @ViewModelInject constructor(jobUseCase: JobUseCase) : ViewModel() {
    val job = jobUseCase.getSearchJob(...).asLiveData()
}

但是getSearchJob()需要参数填写。这是我在活动中使用工作的地方

private fun getSearchData() {
    searchViewModel.job.observe(this, { job ->
        if (job != null) {
            when (job) {
                is Resource.Loading -> binding.progressBar.visibility = View.VISIBLE
                is Resource.Success -> {
                    binding.progressBar.visibility = View.GONE
                    jobAdapter.setData(job.data)
                }
                is Resource.Error -> {
                    binding.progressBar.visibility = View.GONE
                }
            }
        }
    })
}

但我不知道如何在 val 中填写getSearchJob() 参数。或者如果有任何想法请帮助我。

【问题讨论】:

    标签: android kotlin mvvm viewmodel android-viewmodel


    【解决方案1】:

    我认为拥有一个简单的 MutableLiveData 实例会更简单,您可以从中公开可以公开给活动的常规 liveData,并且 onTextChanged 侦听器只需更新 viewModel,jobUseCase.getSearchJob(... ) 获取数据,然后您可以将新值设置为 MutableLiveData 实例。

    如果您需要更优雅的东西,那么让 jobUseCase.getSearchJob(...) 接收一个流实例,您可以将数据传递给该实例,进而触发您的工作 livedata

    基于简单可变实时数据的示例

    class SearchViewModel1 constructor(private val jobUseCase: JobUseCase) : ViewModel() {
    
        private val _internalMutableLiveData = MutableLiveData<String>()
        private val publicLiveData: LiveData<String> = _internalMutableLiveData
    
    
        fun updateSearchTerm(term: String) {
            viewModelScope.launch {
                val result = jobUseCase.getSearchJob(term)
                _internalMutableLiveData.value = result
            }
        }
    
    }
    
    class JobUseCase {
        suspend fun getSearchJob(term: String): String {
            // fetch Data here
            return ""
        }
    }
    

    【讨论】:

    • 你有例子吗?
    • 您是在寻找流程示例还是简单的 Mutable Livedata,我可以更新我的答案
    • 我用简单的可变实时数据示例更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    相关资源
    最近更新 更多