作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用共享 ViewModel 在两个 fragment 和 ViewPager2 之间进行通信,如下所示:
共享 View 模型
val viewPagerFragment = MutableLiveData<Int>()
init {
viewPagerFragment.value = -1
}
fun displayedFragment(fragmentIndex: Int){
viewPagerFragment.value = fragmentIndex
}
fun doSomethingForFragmentA(){
//
}
fun doSomethingForFragmentB(){
//
}
override fun onResume() {
super.onResume()
sharedViewModel.displayedFragment(0)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedViewModel = ViewModelProvider(this).get(SharedViewModel::class.java)
}
override fun onResume() {
super.onResume()
sharedViewModel.displayedFragment(1)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedViewModel = ViewModelProvider(this).get(SharedViewModel::class.java)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
sharedViewModel.viewPagerFragment.observe(this, Observer {
when (it) {
0 -> sharedViewModel.doSomethingForFragmentA(it)
1 -> sharedViewModel.doSomethingForFragmentB(it)
}
})
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedViewModel = ViewModelProvider(this).get(SharedViewModel::class.java)
}
最佳答案
我设法使用 channel 解决了这个问题。不完全是我想要的,但它有效。我仍然希望有一个原始问题的解决方案。
应用容器
class AppContainer {
val currentViewPagerFragmentChannel = Channel<Int>()
}
class BaseApplication : Application(){
val appContainer = AppContainer()
}
override fun onResume() {
super.onResume()
val app = activity?.application as BaseApplication
GlobalScope.launch {
app.appContainer.currentViewPagerFragmentChannel.send(0)
}
}
override fun onResume() {
super.onResume()
val app = activity?.application as BaseApplication
// Send an Integer
GlobalScope.launch {
app.appContainer.currentViewPagerFragmentChannel.send(1)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
launch {
val app = activity?.application as BaseApplication
val ch = app.appContainer.currentViewPagerFragmentChannel
if (!ch.isClosedForSend){
for (value in ch){
when (value) {
// FragmentA is displayed
0 -> sharedViewModel.doSomethingForFragmentA(value)
// FragmentB is displayed
1 -> sharedViewModel.doSomethingForFragmentB(value)
}
}
}
}
}
关于android - 共享 ViewModel 中的 hasActiveObservers 和 hasObservers false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59743521/
在 RxJS 版本 4 中,主题上的 hasObservers 方法似乎已被删除,我正在尝试迁移。如何迁移页面上未列出此方法删除。 hasObservers: function () { checkD
我正在尝试使用共享 ViewModel 在两个 fragment 和 ViewPager2 之间进行通信,如下所示: 共享 View 模型 val viewPagerFragment = Mutabl
我是一名优秀的程序员,十分优秀!