2012-07-17 4 views
1

J'essaie juste de suivre l'exemple de code sur android dev pour gonfler un fragment dans une activité. J'ai un projet plus compliqué que je travaille mais je reçois la même erreur que celle-ci. Est-ce que quelqu'un peut-il me montrer la bonne direction?Erreur de gonflement du fragment

La classe qui étend fragment

package com.example.fragtest; 


import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class FragOne extends Fragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState){ 
     return inflater.inflate(R.layout.activity_main, container,false); 
    } 

} 

La classe qui étend FragmentActivity

package com.example.fragtest; 

import android.os.Bundle; 
import android.view.Menu; 
import android.support.v4.app.FragmentActivity; 

public class MainActivity extends FragmentActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 



} 

Le xml où le fragment est

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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" > 

    <fragment android:name="com.example.fragtest.FragOne" 
     android:id="@+id/frag" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

Le manifeste lorsque le nom de l'activité est définie

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.fragtest" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="11" 
     android:targetSdkVersion="15" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/title_activity_main" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Voici la sortie logcat

07-17 23:45:09.053: E/AndroidRuntime(560): FATAL EXCEPTION: main 
07-17 23:45:09.053: E/AndroidRuntime(560): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.fragtest/com.example.fragtest.MainActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.os.Looper.loop(Looper.java:137) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.app.ActivityThread.main(ActivityThread.java:4340) 
07-17 23:45:09.053: E/AndroidRuntime(560): at java.lang.reflect.Method.invokeNative(Native Method) 
07-17 23:45:09.053: E/AndroidRuntime(560): at java.lang.reflect.Method.invoke(Method.java:511) 
07-17 23:45:09.053: E/AndroidRuntime(560): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
07-17 23:45:09.053: E/AndroidRuntime(560): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
07-17 23:45:09.053: E/AndroidRuntime(560): at dalvik.system.NativeStart.main(Native Method) 
07-17 23:45:09.053: E/AndroidRuntime(560): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
07-17 23:45:09.053: E/AndroidRuntime(560): at com.example.fragtest.FragOne.onCreateView(FragOne.java:18) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:846) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1061) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1160) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
07-17 23:45:09.053: E/AndroidRuntime(560): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.app.Activity.setContentView(Activity.java:1835) 
07-17 23:45:09.053: E/AndroidRuntime(560): at com.example.fragtest.MainActivity.onCreate(MainActivity.java:12) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.app.Activity.performCreate(Activity.java:4465) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 
07-17 23:45:09.053: E/AndroidRuntime(560): ... 11 more 
07-17 23:45:09.053: E/AndroidRuntime(560): Caused by: java.lang.IllegalArgumentException: Binary XML file line #7: Duplicate id 0x7f080000, tag null, or parent id 0x0 with another fragment for com.example.fragtest.FragOne 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:277) 
07-17 23:45:09.053: E/AndroidRuntime(560): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669) 
07-17 23:45:09.053: E/AndroidRuntime(560): ... 30 more 
+0

"à com.wajumbie.nasadailyimage.NasaDailyImage.onCreate (NasaDailyImage.java:37)" Qu'est-ce que est la ligne 37 dans NasaDailyImage, à l'intérieur de vous onCreate()? – Sam

+0

@ Sam, merci, on dirait que j'ai posté le mauvais journal, le bon est maintenant posté –

+0

Pouvez-vous poster comment vous instanciez le fragment? – user1449018

Répondre

7

Dans votre classe qui étend FragmentActivity vous définissez la vue dans un fichier XML intitulé activity_main. À l'intérieur de activity_main vous avez une référence à votre code Fragment, com.example.fragtest.FragOne. Lorsque ce fichier XML est chargé, le code associé à com.example.fragtest.FragOne est exécuté. Ce code Fragment renvoie un Afficher avec le R.id.activity_main.

Ce fichier XML fait référence au même code Fragment qui vient de l'instancier. Vous voyez l'énigme.

Pour résoudre votre problème, indiquez un nouveau fichier XML (un fichier non nommé activity_main) dans votre classe Fragment. Au lieu de gonfler activity_main gonfler un XML séparé (celui qui ne contient pas une référence au code qui l'a appelé). Effectivement activity_main devrait être le conteneur, cette nouvelle mise en page (par exemple fragment_layout) sera la partie de l'interface utilisateur. J'aime penser à ceci: Malgré la doctrine, un fragment a trois parties. Le conteneur Activité (cela peut, et dans votre cas devrait, gonfler un fichier XML de mise en page via setContentView), le code java Fragment (cela peut, et dans votre cas devrait, gonfler une disposition .... quelque chose autre que activity_main), et que Le fichier XML associé au fragment (celui qui est gonflé par votre classe Fragment, n'inclut pas de référence cyclique à son code).

Il y a, bien sûr, des failles à ces mantras mais vous obtenez la dérive?

+0

Je reçois la dérive, et merci beaucoup! C'est juste le genre d'explication que je cherchais :) –

+0

difficulté facile, travaillé comme un charme, merci d'avoir pris le temps de m'aider –

+0

Vous êtes les bienvenus. Heureux d'avoir pu aider! – user1449018

1

android: id = "@ + id/frag"

Votre logcat indique que votre identifiant de fragments est un doublon d'une autre. Avez-vous d'autres éléments XML avec le même identifiant? Si non, avez-vous essayé de nettoyer votre projet?

Project->Clean... 
+1

L'a changé en banane et toujours eu la même erreur –

+0

mhmm, ouais je était faux. Mes excuses. –

1

Vérifiez votre classe de fragment, il gonfle le fichier xml activity_main qui est faux, il devrait gonfler le fichier xml de votre fragment.

0

J'ai le même problème. dans mon xml je crée vue au lieu de vue

si changement nécessaire

<view 
      android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:layout_marginTop="20.7dp" 
      android:textColor="@color/silver_two" 
     /> 

à

<View 
      android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:layout_marginTop="20.7dp" 
      android:textColor="@color/silver_two" 
     /> 
Questions connexes