Tom
Tom

Reputation: 3627

Using Fragments Causes Crash

I have worked towards creating the simplest project I can which cause me problem. I originally thought this was a maps problem until I realized it was probably a general (support library?) fragments problem. (I have tried running this code on my SGII v4.1.2)

Java code:

package com.example.testapp;

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

public class MSMap extends FragmentActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_msmap);
  }
}

XML layout

<?xml version="1.0" encoding="utf-8"?>
<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" 
    >
    <fragment        
        android:id="@+id/themap"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         />
</RelativeLayout>

Above give this error with "error inflating":

03-09 12:06:56.850: E/AndroidRuntime(891): FATAL EXCEPTION: main 03-09 12:06:56.850: E/AndroidRuntime(891): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testapp/com.example.testapp.MSMap}: android.view.InflateException: Binary XML file line #9: Error inflating class fragment 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.ActivityThread.access$700(ActivityThread.java:140) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.os.Handler.dispatchMessage(Handler.java:99) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.os.Looper.loop(Looper.java:137) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.ActivityThread.main(ActivityThread.java:4921) 03-09 12:06:56.850: E/AndroidRuntime(891): at java.lang.reflect.Method.invokeNative(Native Method) 03-09 12:06:56.850: E/AndroidRuntime(891): at java.lang.reflect.Method.invoke(Method.java:511) 03-09 12:06:56.850: E/AndroidRuntime(891): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 03-09 12:06:56.850: E/AndroidRuntime(891): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 03-09 12:06:56.850: E/AndroidRuntime(891): at dalvik.system.NativeStart.main(Native Method) 03-09 12:06:56.850: E/AndroidRuntime(891): Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class fragment 03-09 12:06:56.850: E/AndroidRuntime(891): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 03-09 12:06:56.850: E/AndroidRuntime(891): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:313) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.Activity.setContentView(Activity.java:1924) 03-09 12:06:56.850: E/AndroidRuntime(891): at com.example.testapp.MSMap.onCreate(MSMap.java:23) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.Activity.performCreate(Activity.java:5206) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 03-09 12:06:56.850: E/AndroidRuntime(891): ... 11 more 03-09 12:06:56.850: E/AndroidRuntime(891): Caused by: java.lang.NullPointerException: name == null 03-09 12:06:56.850: E/AndroidRuntime(891): at java.lang.VMClassLoader.findLoadedClass(Native Method) 03-09 12:06:56.850: E/AndroidRuntime(891): at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:354) 03-09 12:06:56.850: E/AndroidRuntime(891): at java.lang.ClassLoader.loadClass(ClassLoader.java:491) 03-09 12:06:56.850: E/AndroidRuntime(891): at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.support.v4.app.Fragment.instantiate(Fragment.java:391) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.support.v4.app.Fragment.instantiate(Fragment.java:369) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272) 03-09 12:06:56.850: E/AndroidRuntime(891): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676) 03-09 12:06:56.850: E/AndroidRuntime(891): ... 21 more

Is there somehow a mismatch between code and XML?

Under all circumstances, I have tried all example I could think and/or Google my way to. All resulting in the same error.

Note: I have android-support-v4.jar in "References Libraries" and "Android Dependencies" and "Libs" in my project.

Upvotes: 3

Views: 3040

Answers (2)

DjHacktorReborn
DjHacktorReborn

Reputation: 2928

Finally i got answer for your question

A Fragment works much like an activity, in that you need a Java class file to go with it. you cannot create a Fragment just by creating a fragment layout - you need a class for your fragment:

Create a layout XML and an Activity subclass for your activity Create a layout XML and a Fragment subclass for your fragment Tie the two together in your Activity layout XML (or using FragmentTransaction if you want to do it in Java code) If you haven't already done so, read, re-read and digest everything on this page: http://developer.android.com/guide/topics/fundamentals/fragments.html

There's a lot there, but Fragments are an essential part of Android apps now so it's required reading. The good news is that the basics of fragments is pretty simple.

So you need to have a class like this

<fragment
       class="com.exercise.FragmentTest.MyFragment"

Upvotes: 3

Arash GM
Arash GM

Reputation: 10395

You didn't sepcify the name for your Fragment , you should provide your fragment class in name attribute for your fragment

like code below :

<fragment        
    android:name="com.yourPackageName.YourFragmentClass" 
    android:id="@+id/themap"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     />

Upvotes: 2

Related Questions