0
votes

Mettre à jour TextView Texte de la classe Companion Object

J'essaie de mettre à jour un TextView à partir d'un objet compagnon de classe et de l'application se bloque. Qu'est-ce que je fais mal?

MainAlacivit.kt strong> p> xxx pré>

exampleclass.kt strong> p>

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


1 commentaires

Peut-être que vous recherchez une vue qui n'appartient pas à la hiérarchie d'affichage de l'activité actuelle.


3 Réponses :


0
votes

Essayez comme suit ce

Pass Objet de MainAlacivité Code> à Exampleclass code> P>

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


1 commentaires

Pourquoi Writetext (TextValue: String, Contexte: Contexte) , puis de la distribution au lieu de Writetext (TextValue: String, MainActivity: MainActivity) ??



1
votes

à l'intérieur de la méthode Writetext (TextValue: String) forte>, vous créez une nouvelle instance forte> de la mainActivity (MainAlacivité ()) dans que TextView est null forte >, et ne pas obtenir l'existant

vous ne devez pas utiliser d'objet compagnon pour cela. ¡¡¡¡Devrait expliquer la situation, pourquoi en avez-vous besoin p>

s'il nécessaire strong>, vous pouvez le faire: P>

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
        }
    }
}


0 commentaires

3
votes

car avec le code MainAlacivity () ... Vous n'obtenez pas l'activité chargée, mais vous construisez une nouvelle activité qui n'a pas encore été diffusée, alors la vue ne 't exist.

Il existe différentes façons d'atteindre ce que vous voulez, même si le flux est faux

exemple xxx

je ne fais pas Savoir exactement pourquoi voulez-vous faire cela, mais si vous souhaitez transmettre des données entre activités ou fragments ou services, vérifiez que https://developer.android.com/Guide/Components/intents-Filters


2 commentaires

Cela semble vrai, mais vous devriez vérifier que c'est une activité toujours en vie. Sinon, vous pourriez obtenir une exception. Vous pouvez utiliser "MainActivity.isfinishing" pour vérifier cela.


vous pouvez faire beaucoup de choses, ce n'est pas quelque chose que vous devriez faire, c'est juste un exemple