2017-05-15 2 views
-4

Je suis très nouveau à l'interface utilisateur Android, je cherchais un endroit où je peux apprendre la structure de base de l'interface utilisateur et comment la communication et les dispositions devraient fonctionner. Mais peu importe. Mon problème vient de moi en essayant de changer la valeur d'un TextView dans un fragment. Je continue d'obtenir une exception nullPointer lorsque j'essaie de changer la valeur. J'utilise un gestionnaire de fragment pour faire référence au fragment.Communiquer avec le fragment NullPointerException

Voici le code fragment:

package com.archronix.infotainment; 

import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


public class Fragment1 extends android.support.v4.app.Fragment { 
public TextView status; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_fragment1, container, 
    false); 
    return v; 
} 

public static Fragment1 newInstance() { 
    Fragment1 f = new Fragment1(); 
    return f; 
} 

public void postText(String str){ 
    status.setText(status.getText()+"\n"+str); 
} 
} 

Et voilà comment je déclare mon gestionnaire de fragment:

fragment1 = (Fragment1) 
getSupportFragmentManager().findFragmentById(R.id.fragment1); 

Et comment je l'utilise:

fragment1.postText("testtext"); 

Mon logcat:

05-15 10 : 56: 42.406 4109-4109/com.archronix.infotainment E/AndroidRuntime: FATAL EXCEPTION: principal Processus: com.archronix.infotainment, PID: 4109 java.lang.RuntimeException: Impossible de démarrer l'activité ComponentInfo {com.archronix. infotainment/com.archronix.infotainment.MainActivity}: java.lang.NullPointerException: Tentative d'invocation de la méthode virtuelle 'void com.archronix.infotainment.Fragment1.postText (java.lang.String)' sur une référence d'objet nul at android. app.ActivityThread.performLaunchActivity (ActivityThread.java:2298) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2360) à l'adresse android.app.ActivityThread.access $ 800 (ActivityThread.java:144) at android.app .ActivityThread $ H.handleMes sage (ActivityThread.java:1278) à android.os.Handler.dispatchMessage (Handler.java:102) à android.os.Looper.loop (Looper.java:135) at android.app.ActivityThread.main (ActivityThread.java:5221) à java.lang.reflect.Method.invoke (Méthode native) à java.lang.reflect.Method.invoke (Method.java:372) à com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:694) Causé par: java.lang.NullPointerException: Tentative d'invocation de la méthode virtuelle 'void com. archronix.infotainment.Fragment1.postText (java.lang.String) 'sur un Référence de l'objet de ull at com.archronix.infotainment.MainActivity.onCreate (MainActivity.java:102) at android.app.Activity.performCreate (Activity.java:5933) at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java : 1105) à android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2251) à android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2360) à android.app.ActivityThread.access $ 800 (ActivityThread.java: 144) à android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1278) à android.os.Handler.dispatchMessage (Handler.java:102) à android.os.Looper.loop (Looper.java:135) à android.app.ActivityThread.main (ActivityThread.java:5221) à java.lang.reflect.Method.invoke (méthode native) à java .lang.reflect.Method.invoke (Method.java:372) sur com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:899) à com.android.internal.os.ZygoteInit.main (ZygoteInit.java:694)

Toutes mes excuses pour mon newbieness. J'ai lu 20 messages de dépassement de pile concernant des sujets similaires, mais tous semblent être soit périmés ou pas cohérent. Quelle est la meilleure façon d'accomplir ma tâche? Je vous remercie.

+0

J'ai lu le message. Et je comprends comment fonctionne NullPointerExceptions, mon problème est que je ne peux pas sembler identifier où et avec quelle variable le problème se produit dans mon code. –

+0

Vous pouvez utiliser le débogueur pour cela – Daniele

+0

Comme vous pouvez le voir, le débogueur me dit qu'il est sur l'appel à la méthode de. Je ne sais pas pourquoi cela appelle une exception NullPointerException. Je souhaite avoir bien compris les méthodes Android pour pouvoir tracer mon problème mais malheureusement je ne le fais pas. Je suis désolé s'il y a une solution disponible, je ne sais pas quoi d'autre à rechercher. –

Répondre

0

Dans onCreateView vous devez initialiser votre TextView comme ceci:

status = (TextView) v.findViewById(R.id.tv_status); 

Si vous connaissez le texte que vous souhaitez définir avant la FragmentTransaction vous pouvez utiliser un Bundle (How to transfer some data to another Fragment?)

+0

Merci beaucoup! Bien que puis-je utiliser plusieurs fois des bundles au moment de l'exécution pendant l'application et pas seulement dans onCreate? –

+0

Bien, l'ensemble est également utilisé lorsque l'orientation de l'écran change et que vous voulez enregistrer certaines valeurs (puisque l'activité est détruite et recréée). –

+0

Généralement, un ensemble est utilisé pour transférer des données de l'activité A à l'activité B ou entre des fragments. –

1

variable d'état n'est pas affecté à n'importe quelle vue de texte. Ajoutez le code suivant dans onCreateView avant l'instruction de retour

status=v.findViewById(R.id.<nameoftextview>);