从 class 伴随对象更新 textView 文本
Update textView text from class companion object
我正在尝试从 class 的伴随对象更新 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 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
}
}
}
在 writeText (textValue: String) 方法中,您在 哪个textView为null,没有得到已有的
你不应该为此使用伴随对象。
Сould解释情况,为什么你需要它
如果需要,您可以这样做:
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()...
您没有获得已加载的 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
我正在尝试从 class 的伴随对象更新 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 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
}
}
}
在 writeText (textValue: String) 方法中,您在 哪个textView为null,没有得到已有的
你不应该为此使用伴随对象。 Сould解释情况,为什么你需要它
如果需要,您可以这样做:
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()...
您没有获得已加载的 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