I'm trying to create a fragment in main activity so later i can add elements dynamically in, when i run the app i get this error:
04-29 19:32:47.318 E/ AndroidRuntime(27813): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.myapp/com.mycompany.myapp.MainActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class Fragment
When i try to run the app without the <Fragment>
tag in main.xml it works
MainActivity:
package com.mycompany.myapp;
import android.os.Bundle;
import android.app.Activity;
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<Fragment
android:id="@+id/fL"
android:name="com.mycompany.myapp.MyFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
MyFragment:
package com.mycompany.myapp;
import android.os.Bundle;
import android.view.*;
import android.app.Fragment;
public class MyFragment extends Fragment
{
View root;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
super.onCreateView(inflater, container, savedInstanceState);
root = inflater.inflate(R.layout.fraglayout, container, false);
return root;
}
}
fraglayout.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.mycompany.myapp.MyFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
Also tried
class="com.mycompany.myapp.MyFragment"
instead ofandroid:name
in main layout<fragment>
Full logCat(E):
04-29 20:11:03.444 E/dalvikvm(4221): heapsize Dalvik_dalvik_system_VMRuntime_nativeMinimumHeapSize 0
04-29 20:11:03.444 E/dalvikvm(4221): heapsize Dalvik_dalvik_system_VMRuntime_nativeMinimumHeapSize 15154664
04-29 20:11:03.945 E/AndroidRuntime(4221): FATAL EXCEPTION: main
04-29 20:11:03.945 E/AndroidRuntime(4221): Process: com.mycompany.myapp, PID: 4221
04-29 20:11:03.945 E/AndroidRuntime(4221): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.myapp/com.mycompany.myapp.MainActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class Fragment
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2342)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.app.ActivityThread.access$800(ActivityThread.java:151)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1266)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.os.Handler.dispatchMessage(Handler.java:102)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.os.Looper.loop(Looper.java:136)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.app.ActivityThread.main(ActivityThread.java:5421)
04-29 20:11:03.945 E/AndroidRuntime(4221): at java.lang.reflect.Method.invokeNative(Native Method)
04-29 20:11:03.945 E/AndroidRuntime(4221): at java.lang.reflect.Method.invoke(Method.java:515)
04-29 20:11:03.945 E/AndroidRuntime(4221): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:979)
04-29 20:11:03.945 E/AndroidRuntime(4221): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
04-29 20:11:03.945 E/AndroidRuntime(4221): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
04-29 20:11:03.945 E/AndroidRuntime(4221): at dalvik.system.NativeStart.main(Native Method)
04-29 20:11:03.945 E/AndroidRuntime(4221): Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class Fragment
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
04-29 20:11:03.945 E/AndroidRuntime(4221): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:296)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.app.Activity.setContentView(Activity.java:1941)
04-29 20:11:03.945 E/AndroidRuntime(4221): at com.mycompany.myapp.MainActivity.onCreate(MainActivity.java:13)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.app.Activity.performCreate(Activity.java:5264)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1099)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2282)
04-29 20:11:03.945 E/AndroidRuntime(4221): ... 12 more
04-29 20:11:03.945 E/AndroidRuntime(4221): Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.Fragment" on path: DexPathList[[zip file "/data/app/com.mycompany.myapp-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.mycompany.myapp-2, /vendor/lib, /system/lib]]
04-29 20:11:03.945 E/AndroidRuntime(4221): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
04-29 20:11:03.945 E/AndroidRuntime(4221): at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
04-29 20:11:03.945 E/AndroidRuntime(4221): at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.view.LayoutInflater.createView(LayoutInflater.java:559)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:652)
04-29 20:11:03.945 E/AndroidRuntime(4221): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
04-29 20:11:03.945 E/AndroidRuntime(4221): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
04-29 20:11:03.945 E/AndroidRuntime(4221): ... 22 more
Try using lowercase "f" instead of uppercase letter "F" on main.xml
layout while writing Fragment
:
// <<<< start with lowercase
<fragment
android:id="@+id/fL"
android:name="com.mycompany.myapp.MyFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Some explanation about the solution I have found on another question:
Fragments when defined in XML aren't actually views. The full view name is specified, or it assumes android.view for the package and finds the rest. But a fragment is only truly specified when it includes the android:name tag. It acts like a keyword, which are typically written in lower case. Thus, Fragment refers to the class, and fragment is the placeholder in XML for fragments.
As Andrew mentioned in the comments, any special item, such as and are written in lower case, as they are not android.view's.