如何在 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