【问题标题】:Can't get search data from ViewModel to Activity Kotlin无法从 ViewModel 获取搜索数据到 Activity Kotlin
【发布时间】:2021-11-04 02:06:00
【问题描述】:

我正在尝试将我的数据从我的 ViewModel 获取到我的 MainActivity。

我知道我在MainActivity 中所做的事情是非常错误的,但我似乎无法以将数据导入 MainActivity 的方式对其进行配置。这只是一个简单的字符串。

视图模型

class MovieSearchViewModel : ViewModel() {
    var searchTerm = ""

    fun getSearchTerm(query: String) {
        searchTerm = query
    }
}

MainActivity

open class MainActivity : AppCompatActivity() {
    private val viewModel: MovieSearchViewModel by viewModels()
    override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)

         var searchTerm = viewModel.searchTerm
    }
}

【问题讨论】:

  • 字符串的数据在哪里? getSearchTerm 应该重命名为 setSearchTerm,因为它是一个 setter 函数。并使用设置数据所需的数据调用它。
  • 数据来自fragment中的一个搜索栏,然后传递给ViewModel,需要去MainActivity。
  • 您正在获取有关活动onCreate 的数据。所以数据可能不会在那个时候设置。您必须使用 LiveData 从 ViewModel 获取更新的数据
  • 是的,我一直在玩这个。我会继续努力的。

标签: android kotlin viewmodel


【解决方案1】:

查看模型

您可以使用 LiveData 始终获取 Activity 中的最新数据

var searchTerm = MutableLiveData("")
fun setSearchTerm(query: String){
    searchTerm.value = query
}

MainActivity

观察它总是会在每次有数据变化时运行

viewModel.searchTerm.observe(this){
     Log.e("tag", it)
}

如果你想在不观察的情况下手动获取数据,你可以这样做

var data = viewModel.searchTerm.value

【讨论】:

  • MainActivity 中的“更新数据”会包含哪些内容?如果我只是想做一些简单的事情,比如将字符串打印到控制台,那会是什么样子?
  • 是的,你可以做到,例如 viewModel.searchTerm.observe(this){ Log.e("tag", it) }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 2020-08-03
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多