繁体   English   中英

从 class 伴侣 object 更新 textView 文本

[英]Update textView text from class companion object

我正在尝试从类的同伴 object 更新 textView 并且应用程序崩溃。 我究竟做错了什么?

MainActivity.kt

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.test.testapp.classes.ExampleClass
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        testMessage.text = "1"
        ExampleClass.writeText("2")
    }
}

ExampleClass.kt

import com.test.testapp.MainActivity
import kotlinx.android.synthetic.main.activity_main.*

class ExampleClass {
    companion object{
        fun writeText(textValue:String) {
            MainActivity().testMessage.text = textValue
        }
    }
}

Android工作室错误信息:

FATAL EXCEPTION: main Process: com.test.testapp, PID: 15819
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.testapp/com.test.testapp.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference

因为使用代码MainActivity()...您没有获得已加载的 Activity,但您正在构建一个尚未显示的新 Activity,因此视图不存在。

有多种方法可以实现你想要的,即使流程是错误的

例子

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        testMessage.text = "1"
        ExampleClass.writeText("2",this)
    }
}

class ExampleClass {
    companion object{
        fun writeText(textValue:String,mainActivity:MainActivity) {
            mainActivity.testMessage.text = textValue
        }
    }
}

我不知道您为什么要这样做,但是如果您想在活动或片段或服务之间传递数据,请检查https://developer.android.com/guide/components/intents-filters

writeText (textValue: String)方法中,您创建一个 MainActivity (MainActivity()) 的新实例其中 textView 是 null ,而不是获取现有的

您不应该为此使用配套的 object。 可以解释情况,为什么需要它

如果有必要,您可以这样做:

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.test.testapp.classes.ExampleClass
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        testMessage.text = "1"
        ExampleClass.writeText("2", testMessage)
    }
}

ExampleClass.kt

import com.test.testapp.MainActivity
import kotlinx.android.synthetic.main.activity_main.*

class ExampleClass {
    companion object{
        fun writeText(textValue:String, textView: TextView) {
            textView.text = textValue
        }
    }
}

像这样试试

MainActivity Object传递给ExampleClass

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        testMessage.text = "1"
        ExampleClass.writeText("2",this)
    }
}

并使用MainActivity object访问其属性。

class ExampleClass {
    companion object{
        fun writeText(textValue:String,mainActivity: MainActivity) {
            mainActivity.testMessage.text = textValue
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM