Nel*_*dra 5 android mvvm android-fragments android-livedata android-viewmodel
我有一个简单的场景,我在片段中做一些事情,当我收到 LiveData 时,我想在 Activity 中做一些事情。
视图模型:
class MyViewModel(application: Application) : AndroidViewModel(application) {
...
fun getUser(id: String): LiveData<User> {
return repository.getUser(id)
}
}
Run Code Online (Sandbox Code Playgroud)
分段:
class MyFragment : Fragment() {
private lateinit var myViewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activity?.run {
myViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
} ?: throw Exception("Invalid Activity")
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
button.setOnClickListener {
showProgressBar()
myViewModel.getUser(editText.text.toString()).observe(this, Observer { it ->
//TODO
})
}
}
}
Run Code Online (Sandbox Code Playgroud)
活动:
class MainActivity : AppCompatActivity() {
private lateinit var myViewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
myViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
//Here I would like to observe the user instance returned from the getUser() method
}
}
Run Code Online (Sandbox Code Playgroud)
所以我遇到的问题是我想要一个LiveData<User>
in的实例,MyViewModel
以便我可以在 Activity 和 Fragment 中观察它。我怎样才能做到这一点?
Abd*_*zar 11
在片段中(作为最佳实践)应该使用
viewModel.userLiveData.observe(viewLifecycleOwner, Observer {
//your code here
})
Run Code Online (Sandbox Code Playgroud)
活动使用中
viewModel.userLiveData.observe(this, Observer {
//your code here
})
Run Code Online (Sandbox Code Playgroud)
小智 4
在 MyViewModel 类中创建
val userLiveData =MutableLiveData<User>()
Run Code Online (Sandbox Code Playgroud)
和吸气剂
fun getUserLiveData(id: String): MutableLiveData<User> {
return userLiveData
}
fun getUser(id: String){
val disposableUser = repository.getUser(id)
.subscribe({
userLivedata.postValue(it)
})
Run Code Online (Sandbox Code Playgroud)
}
在活动或片段中称为
myViewModel.getUserLiveData.observe(this, Observer { it ->
//TODO
})
myViewModel.getUser(...)
Run Code Online (Sandbox Code Playgroud)
现在在 ViewModel 中你有对象 User (userLiveData.getValue())
归档时间: |
|
查看次数: |
11417 次 |
最近记录: |