0

我是 kotlin 和 kodein 开发的新手。我想将数据注入一个不扩展任何内容的简单类。

我有我MainActivity的扩展KodeinAppCompatActivity(),扩展的片段KodeinSupportFragment()从我的简单类中调用一个函数CallType。但是这个函数必须从另一个简单的类中改变一个布尔值ConnectivitySate。我不想使用静态值。

下面,我的代码:

    class App : Application(), KodeinAware {

override val kodein by Kodein.lazy {
    import(autoAndroidModule(this@App))

    bind<CallType>() with instance(CallType())
    bind<ConnectivityState>() with instance(ConnectivityState())
    bind<ContactData>() with instance(ContactData())

}

override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(androidActivityScope.lifecycleManager)
}        

主要活动 :

    class MainActivity : KodeinAppCompatActivity() {        

我的片段:

class JournalFragment : KodeinSupportFragment(){

  private val callType: CallType by instance()

  @SuppressLint("MissingSuperCall")
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    initializeInjector()
}

  override fun onCreateView(inflater: LayoutInflater?, container: 
          ViewGroup?,savedInstanceState: Bundle?): View? {

      // !! CALL MY FUNCTION !!
      callType.call(callType.callNumber)

  }

 ....

 @SuppressLint("MissingSuperCall")
 override fun onDestroy() {
    super.onDestroy()
    destroyInjector()
}

我的简单课程:

class CallType {

fun call(number: String) {

   // !! I want to change gsmState value from ConnectivityState class
   connectivityState.gsmState = true

}

我的 ConnectivityState 类:

class ConnectivityState {

    var gsmState = false

}

这是许多其他例子中的一个例子,因为在很多情况下,我都被这样阻止了。我尝试了很多东西,但我总是有错误:value not injected

非常感谢您的回复..

4

1 回答 1

0

当你调用时super.onCreate(),它调用onCreateView,所以该线路callType.call(callType.callNumber)在调用之前 initializeInjector()

请注意,您应该始终在调用initializeInjector() 之前调用super.onCreate()

override fun onCreate(savedInstanceState: Bundle?) {
    initializeInjector()
    super.onCreate(savedInstanceState)
}
于 2017-10-16T14:30:53.680 回答