代码之家  ›  专栏  ›  技术社区  ›  Devrath

如何在kotlin android中访问活动中的应用程序类变量

  •  1
  • Devrath  · 技术社区  · 5 年前
    • 我曾经使用 Java中的公共方法
    • 如何使用kotlin

    App.KT

    class App : Application() {
    
    
        private var app: App? = null
        private var movieAppComponent: MovieAppComponent? = null
    
        override fun onCreate() {
            super.onCreate()
            app = this
    
            movieAppComponent = DaggerMovieAppComponent.builder()
                .applicationModule(ApplicationModule(this))
                .netModule(NetModule(Keys.BASE_URL, this))
                .build()
        }
    
        fun getApp(): App? {
            return app
        }
    
        fun getMovieAppComponent(): MovieAppComponent? {
            return movieAppComponent
        }
    
    }
    

    主要活动.kt

    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
             setContentView(R.layout.activity_main)
            App.getApp().getMovieAppComponent().inject(this)
        }
    
    
    
    }
    

    错误:

    App.getApp().getMovieAppComponent().inject(this)
    

    在这里 getApp() 我得到的是未解决的参考

    2 回复  |  直到 5 年前
        1
  •  1
  •   Birju Vachhani    5 年前

    解决方案1:

    class App : Application() {
    
        private var movieAppComponent: MovieAppComponent? = null
    
        companion object {
            private var app: App? = null
    
            fun getApp(): App? {
                return app
            }
        }
    
        override fun onCreate() {
            super.onCreate()
            app = this
    
            movieAppComponent = DaggerMovieAppComponent.builder()
                .applicationModule(ApplicationModule(this))
                .netModule(NetModule(Keys.BASE_URL, this))
                .build()
        }
    
        fun getMovieAppComponent(): MovieAppComponent? {
            return movieAppComponent
        }
    }
    

    解决方案2:

    不需要创建这样的方法。您可以在活动中使用类型转换:

    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
             setContentView(R.layout.activity_main)
            (application as? App)?.getMovieAppComponent()?.inject(this)
        }
    }