从伴生对象内的参考视图-Kotlin
我的目标是从类(和包)外部静态更新视图的状态。目前,我有一个类的伴生对象和一个公共函数来实现这一点 但是,当我试图从伴随对象中引用“父对象”的视图时,编译器会抱怨“未解析引用”。有人知道正确的方法吗?提前谢谢从伴生对象内的参考视图-Kotlin,kotlin,Kotlin,我的目标是从类(和包)外部静态更新视图的状态。目前,我有一个类的伴生对象和一个公共函数来实现这一点 但是,当我试图从伴随对象中引用“父对象”的视图时,编译器会抱怨“未解析引用”。有人知道正确的方法吗?提前谢谢 class MyActivity: AppCompatActivity() { companion object { fun updateDisplay(message: String) { mTextView.text = message
class MyActivity: AppCompatActivity() {
companion object {
fun updateDisplay(message: String) {
mTextView.text = message // Unresolved reference: mTextView
}
}
@BindView(R.id.my_text_view) lateinit var mTextView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.my_activity)
ButterKnife.bind(this)
}
// ...
}
我不建议使用此选项,但我会将其保留在此处,因为我在评论中了解到了一些东西!):
类MyActivity:AppCompatActivity(){
伴星{
//在此处引用类实例
变量实例:MyActivity?=null
趣味updateDisplay(消息:字符串){
实例?.findViewById(R.id.mTextView)?.let{
it.text=消息
}
}
}
@BindView(R.id.my_text_view)lateinit var mTextView:TextView
重写创建时的乐趣(savedInstanceState:Bundle?){
instance=这//意味着它将始终引用最近创建的实例
super.onCreate(savedInstanceState)
setContentView(R.layout.my_活动)
黄油刀,绑(这个)
}
// ...
}
没有什么好办法可以做到这一点。伴生对象不知道该类存在哪些实例,也不能以任何方式与这些实例交互。您需要有一个对您试图以某种方式更改的活动的引用。(活动可能甚至没有显示)这样你就泄露了你的活动。这很糟糕吗?(我也在学习自己,所以非常愿意发表评论)关于活动泄密,请看:事实上,你也在使用一个全球性的,这是一个非常有说服力的实践。感谢Joozd,我成功地在课堂上引用了这个观点。然而,正如@al3c所指出的,使用全局变量和活动泄漏不值得这么麻烦。我得用更好的方式设计这个项目。谢谢大家!
class MyActivity: AppCompatActivity() {
companion object {
// make a reference to the class instance in here
var instance: MyActivity? = null
fun updateDisplay(message: String) {
instance?.findViewById<TextView>(R.id.mTextView)?.let{
it.text = message
}
}
}
@BindView(R.id.my_text_view) lateinit var mTextView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
instance = this // meaning it will always reference the most recent instance created
super.onCreate(savedInstanceState)
setContentView(R.layout.my_activity)
ButterKnife.bind(this)
}
// ...
}