2012-12-09 4 views
1

Je continue d'obtenir cette erreur lors du démarrage de l'activité qui a un fragment.Erreur InflateException gonflement du fragment de classe

Voici l'aperçu de mon code:

Accueil activité est démarré à partir activité Splash screen

home.xml (Chaque fragment a 50% layout_weight)

<LinearLayout> 
    <fragment android:name="com.example.test.FragmentClass1" ...> 
    <fragment android:name="com.example.test.FragmentClass2" ...> 
</LinearLayout> 

fragment1.xml

<LinearLayout> 
    //some EditTexts and Buttons here 
<LinearLayout> 

fragment2.xml

<LinearLayout> 
    <ListView ... /> 
</LinearLayout> 

FragmentClass1.java

public class FragmentClass1 extends Fragment{ 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     View view = inflater.inflate(R.layout.fragment1, container, false); 
     return view; 
    } 
} 

FragmentClass2.java

public class FragmentClass2 extends ListFragment{ 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     View view = inflater.inflate(R.layout.fragment2, container, false); 
     return view; 
    } 
} 

Home.java

public class Home extends Activity{ 
    public View onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home); 
     //still empty 
    } 
} 

Le journal d'erreur est la suivante:

12-09 20:39:00.317: E/AndroidRuntime(18214): FATAL EXCEPTION: main 
12-09 20:39:00.317: E/AndroidRuntime(18214): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.Home}: android.view.InflateException: Binary XML file line #10: Error inflating class fragment 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.os.Looper.loop(Looper.java:137) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.app.ActivityThread.main(ActivityThread.java:5039) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at java.lang.reflect.Method.invokeNative(Native Method) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at java.lang.reflect.Method.invoke(Method.java:511) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at dalvik.system.NativeStart.main(Native Method) 
12-09 20:39:00.317: E/AndroidRuntime(18214): Caused by: android.view.InflateException: Binary XML file line #10: Error inflating class fragment 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.app.Activity.setContentView(Activity.java:1881) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at com.example.test.Home.onCreate(Home.java:16) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.app.Activity.performCreate(Activity.java:5104) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
12-09 20:39:00.317: E/AndroidRuntime(18214): ... 11 more 
12-09 20:39:00.317: E/AndroidRuntime(18214): Caused by: java.lang.ClassCastException: com.example.test.Fragment1 cannot be cast to android.app.Fragment 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.app.Fragment.instantiate(Fragment.java:585) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.app.Fragment.instantiate(Fragment.java:560) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.app.Activity.onCreateView(Activity.java:4709) 
12-09 20:39:00.317: E/AndroidRuntime(18214): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
12-09 20:39:00.317: E/AndroidRuntime(18214): ... 21 more 

Toute solution? Merci

Répondre

5

Si vous essayez d'utiliser le backport de fragments du package de support Android, votre activité doit hériter de FragmentActivity (ou de quelque chose d'autre qui hérite de FragmentActivity, comme SherlockFragmentActivity).


MISE À JOUR

La ligne clé de votre trace de la pile est:

12-09 20:39:00.317: E/AndroidRuntime(18214): Caused by: java.lang.ClassCastException: com.example.test.Fragment1 cannot be cast to android.app.Fragment 

Maintenant, il n'y a rien dans votre code source fourni qui est nommé com.example.test.Fragment1. Si c'est vraiment ce que vous avez dans vos listes comme com.example.test.FragmentClass1, alors probablement le Fragment dont vous héritez n'est pas android.app.Fragment. Le plus probable, dans ce cas, c'est android.support.v4.app.Fragment - la classe Fragment du backport. Si c'est le cas, modifiez l'instruction d'importation (et toutes les autres erreurs dans le reste de votre base de code).

+0

Je prévoyais de créer ICS 4.0.3+ uniquement. Donc ça devrait aller, n'est-ce pas? – hrsetyono

+1

@DarcCode: Oui, mais le message d'erreur est comme si vous utilisiez une ancienne version d'Android, si c'est tout ce qu'il y a à faire. S'il y a plus de trace de la pile (par exemple, "Causé par"), veuillez l'afficher. – CommonsWare

+0

Je l'utilise sous Galaxy Nexus fonctionnant sous Android 4.2.1 En passant, je viens de mettre à jour le journal des erreurs complet. Merci – hrsetyono

0

Vous devez écrire

super.onCreateView(inflater, container, savedInstanceState); 

dans votre méthode de onCreateView.

+0

Merci pour la réponse mais j'ai déjà eu la bonne réponse. Et je ne pense pas que nous devons ajouter super – hrsetyono

+0

cela ne fonctionne pas pour moi aussi ... – Zhar

0

J'ai rencontré ce problème. et je l'ai corrigé en ajoutant les lignes suivantes dans le manifeste.

<meta-data android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version"/> 
Questions connexes