2017-10-08 2 views
0

J'envoie une interface de Fragment 5 à 3 par l'activité principale:Fragment d'erreur Interface Fragment (mise en page)

public void setF3Riddle(int x) { 

    Frag3 F3 = (Frag3) getSupportFragmentManager().findFragmentById(R.id.Frag3); 

    if (F3 != null) { 
    F3.getF3Riddle(x); 
    } else { 
    Frag3 frag = new Frag3(); 
    Bundle args = new Bundle(); 
    args.putInt("Value", x); 
    frag.setArguments(args); 
    getSupportFragmentManager().beginTransaction() 
           .replace(R.id.Frag3, frag) 
           .addToBackStack(null) 
           .commit(); 
    frag.getF3Riddle(x); 
    } 
} 

Mais il se bloque lorsque j'envoie les données lors de l'exécution. J'ai remarqué le problème lorsque je change le conteneur .replace(R.id.Frag3,Frag) en un autre fragment qu'il ne plante pas. Quel est le problème ici?

Fragment 3 Mise en page:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/Frag3" 
    tools:context="com.redot.puzzle3.Frag3"> 

Merci beaucoup pour votre temps et de l'assistance dans ce domaine.

Répondre

0

Le problème est probablement d'ici:

Frag3 frag = new Frag3(); 
Bundle args = new Bundle(); 
args.putInt("Value", x); 
frag.setArguments(args); 
getSupportFragmentManager().beginTransaction() 
          .replace(R.id.Frag3, frag) 
          .addToBackStack(null) 
          .commit(); 
frag.getF3Riddle(x); 

Vous créez le fragment avec Frag3 frag = new Frag3(); et mettre le paquet alors vous voulez obtenir la valeur avec frag.getF3Riddle(x). Mais il va lancer une erreur car le fragment n'est pas encore fini. La création de fragment est processus asynchrone. Donc, vous devez attendre que le fragment soit terminé ou le créer dans un autre endroit en premier.

+0

3 existe déjà et j'ai fait la même chose avec le fragment 4 et cela a fonctionné. Je pense que le problème est avec la mise en page parce que quand je remplace l'id de fragment 'R.id.Frag3' avec Frag4 et il ne plante pas il remplace juste le fragment 4 Je le veux pour remplacer frament 3 mais pour une raison quelconque il se bloque – amirsoltani