2

需要一点点澄清一件事,现在正在处理一个我有两个视图模型并且一个依赖于另一个的流程,为了处理我尝试在我的基本活动中注入两个视图模型的问题,我遇到了这种方法. 每次我尝试访问这些视图模型时,Base Activity 都会返回新实例,有什么方法可以管理该视图模型的范围,以便我可以轻松访问其属性而无需添加额外的 Api 调用。

模块类

    val homeModule= module {
      
        single { HomeDispatcher(get(), get()) }
        viewModel { HomeViewModel (get()) }
    }

**Main Activity**

    import org.koin.android.viewmodel.ext.android.viewModel

        class NotificationActivity : BaseActivity() {
        
           private val viewModel: HomeViewModel by inject()
        
           private val viewModel: HomeViewModel by viewModel()
    }
    
    
    
        class NotificationsFragment : BaseFragment() {
        
           private val viewModel: HomeViewModel by viewModels({requireActivity()})
    
           private val viewModelx: HomeViewModel by activityViewModels
    
    
        
        }

> by using viewModels({requireActivity()}) getting instance not found.

更新刀柄

   implementation "androidx.activity:activity-ktx:1.2.0"

   private val viewModelx: HomeViewModel by viewModels

上述库有视图模型,可以直接懒惰地注入视图模型。

4

2 回答 2

3
import org.koin.android.viewmodel.ext.android.viewModel
import org.koin.android.viewmodel.ext.android.sharedViewModel 

private val viewModel: HomeViewModel by viewModel()

所以通过viewModel()在活动和sharedViewModel<MyViewModel>()片段类中使用解决了这个问题

于 2021-08-20T10:27:07.577 回答
2

您需要在 koin 模块中提供上下文

val appModule = module {
single { HomeViewModel (get()) } // it will get the context from Application Context
   
}

在您想使用的活动中,只需使用

private val viewModel: HomeViewModel by inject()

它将返回您的 viewModel 的单个实例

于 2021-07-12T10:05:31.500 回答