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

Posted

技术标签:

【中文标题】如何在 kotlin android 的活动中访问应用程序类变量【英文标题】:How to access Application class variables in activity in kotlin android 【发布时间】:2019-07-21 04:06:41 【问题描述】: 我曾经通过使用 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
    


MainActivity.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() 我得到了未解决的参考

【问题讨论】:

因为 getApp 是一个非静态方法 .. 使 app 静态与 Companion 块 .. @ADM .... 你能把它显示为答案,所以我可以接受它 【参考方案1】:

解决方案 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:

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

class MainActivity : AppCompatActivity() 

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

【讨论】:

以上是关于如何在 kotlin android 的活动中访问应用程序类变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Kotlin 中创建一个打开新活动(Android Studio)的按钮?

当我使用 Kotlin 在 Android Studio 中更改为另一个活动时如何停止崩溃

如何根据 android studio 中的 listview 项目点击更改活动图像和文本? java 或 kotlin

如何通过单击 Image Kotlin Android 来移动 Activity

Android/Kotlin:将不同的活动“特征”组合成一个活动

社区说|Hilt 和 Kotlin Flow 在 Android 程序架构实现中的应用