2016-02-15 2 views
0

J'essaie de mettre à jour un textview dans un fragment en fonction d'une intention passée, mais je continue à recevoir une erreur. Voici mon code:Erreur de gonflement du fragment xml

public class PlayerDisplayFragment extends Fragment { 

public PlayerDisplayFragment() { 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_player_display, container, false); 

    String[] playerArray = getArguments().getStringArray("playerArray"); 
    updateText(view,playerArray); 

    return view; 
} 

public void updateText (View view , String[] playerArray){ 

    String pName = playerArray[0] + " " + playerArray[1]; 
    TextView playerName = (TextView) view.findViewById(R.id.player_name); 
    playerName.setText(pName); 

} 
} 

Le code se bloque lorsqu'il tente d'exécuter la fonction updateText. Voici l'élément XML (dans le fichier xml fragment) qu'il se réfère à:

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Placeholder" 
    android:textSize="18sp" 
    android:id="@+id/player_name" 
    android:gravity="center"> 
</TextView> 

Et enfin, voici l'erreur:

26609-26609/? E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.android.soccerstar, PID: 26609 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.soccerstar/com.example.android.soccerstar.PlayerDisplay}: 
          android.view.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class fragment 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: android.view.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class fragment 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:539) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
    at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:393) 
    at android.app.Activity.setContentView(Activity.java:2172) 
    at com.example.android.soccerstar.PlayerDisplay.onCreate(PlayerDisplay.java:13) 
    at android.app.Activity.performCreate(Activity.java:6251) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
    at android.app.ActivityThread.-wrap11(ActivityThread.java)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:148)  
    at android.app.ActivityThread.main(ActivityThread.java:5417)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

edit: xml complet ici:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.android.soccerstar.PlayerDisplayFragment"> 

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="100dp" 
      android:src="@drawable/placeholder_m" 
      android:background="#7b7b7b" 
      android:layout_alignParentTop="true" 
      android:id="@+id/PlayerPhoto"/> 
     /> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="58dp" 
      android:gravity="center" 
      android:textSize="16sp" 
      android:textColor="#000000" 
      android:text="You matched Lionel Messi!" 
      android:layout_below="@+id/PlayerPhoto" 
      android:id="@+id/MatchText"> 
      </TextView> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:weightSum="2" 
      android:layout_below="@+id/MatchText" 
      > 
       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_weight="1" 
        android:orientation="vertical"> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Your Name" 
         android:textSize="18sp" 
         android:gravity="center"> 
        </TextView> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:paddingTop="8dp" 
         android:layout_margin="8dp" 
         android:text="Born on April 15, 1992" 
         android:textSize="14sp" 
         android:gravity="center"> 
        </TextView> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:paddingTop="8dp" 
         android:layout_margin="8dp" 
         android:text="Is 5 foot 11 inches tall." 
         android:textSize="14sp" 
         android:gravity="center"> 
        </TextView> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:paddingTop="8dp" 
         android:layout_margin="8dp" 
         android:text="Weighs 160 lbs." 
         android:textSize="14sp" 
         android:gravity="center"> 
        </TextView> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:paddingTop="8dp" 
         android:layout_margin="8dp" 
         android:text="Prefers right foot" 
         android:textSize="14sp" 
         android:gravity="center"> 
        </TextView> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:paddingTop="8dp" 
         android:layout_margin="8dp" 
         android:text="American Nationality" 
         android:textSize="14sp" 
         android:gravity="center"> 
        </TextView> 

       </LinearLayout> 
      <View 
       android:layout_width="1dp" 
       android:layout_height="300dp" 
       android:background="@android:color/darker_gray" 
       /> 
      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:orientation="vertical"> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="Lionel Messi" 
        android:textSize="18sp" 
        android:id="@+id/player_name" 
        android:gravity="center"> 
       </TextView> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:paddingTop="8dp" 
        android:layout_margin="8dp" 
        android:text="Born on April 15, 1992" 
        android:textSize="14sp" 
        android:gravity="center"> 
       </TextView> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:paddingTop="8dp" 
        android:layout_margin="8dp" 
        android:text="Is 5 foot 11 inches tall." 
        android:textSize="14sp" 
        android:gravity="center"> 
       </TextView> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:paddingTop="8dp" 
        android:layout_margin="8dp" 
        android:text="Weighs 160 lbs." 
        android:textSize="14sp" 
        android:gravity="center"> 
       </TextView> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:paddingTop="8dp" 
        android:layout_margin="8dp" 
        android:text="Prefers right foot" 
        android:textSize="14sp" 
        android:gravity="center"> 
       </TextView> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:paddingTop="8dp" 
        android:layout_margin="8dp" 
        android:text="American Nationality" 
        android:textSize="14sp" 
        android:gravity="center"> 
       </TextView> 

      </LinearLayout> 

     </LinearLayout> 
    </RelativeLayout> 
</ScrollView> 

Voici de l'activité principale:

public class PlayerDisplay extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_player_display); <--- THIS IS LINE 13 
} 

Voici le fichier activity_player_display.xml:

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/fragment" 
android:name="com.example.android.soccerstar.PlayerDisplayFragment" 
tools:layout="@layout/fragment_player_display" android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".PlayerDisplay" /> 

Là où je nourris dans le tableau du fragment principal:

  Intent intent = new Intent(getActivity(), com.example.android.soccerstar.PlayerDisplay.class); 
      intent.putExtra("playerArray", playerArray); 
      startActivity(intent); 
+0

pouvez-vous poster le code xml de fragment complet? – Jayanth

+1

Si '@ + id/player_name' est dans le fragment ** xml, alors pourquoi essayez-vous de le trouver dans l'activité' getActivity(). FindViewById (R.id.player_name) '? Ce n'est pas comme ça qu'on obtient des vues dans un fragment –

+0

jayanth - c'est assez long. quelque chose en particulier que vous cherchez? cricket - ouais je réalise que je fais vraiment quelque chose de mal. comment voulez-vous résoudre le problème/obtenir une vue dans un fragment? – NBC

Répondre

0

Utilisez le Bundle dans votre Fragment principal comme celui-ci.

Fragment fragment = new PlayerFragment(); 
Bundle bundle = new Bundle(); 
bundle.putStringArray("playerArray", playerArray); 
fragment.setArguments(bundle); 

Et dans votre Player Player getArguments.

Bundle bundle = this.getArguments(); 
if(bundle != null){ 
    String[] playerArray = getArguments().getStringArray("playerArray"); 
} 

Espérons que cela vous aidera.

+0

Cela n'a pas fonctionné. Merci d'essayer si! – NBC

+0

@NBC: qu'est-ce qui ne fonctionne pas? –

+0

Je reçois toujours la même erreur – NBC

0

Enfin compris. C'était si simple!

Ce code de la ligne 13 qui était en cours de référence provenait de l'activité principale du fragment. Il faisait référence au fichier xml de l'activité principale au lieu du fichier fragment xml. Alors je l'ai changé:

PlayerDisplay public class activité {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_player_display); <--- THIS IS LINE 13 
} 

à

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.fragment_player_display); <--- THIS IS LINE 13 
} 

Et maintenant ça marche! Merci a tous.