Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting Error while implementing Fragmentation in Android

I am getting error everytime when I run my Fragment API example application. It is referenced from Android Developers Guide http://developer.android.com/reference/android/app/Fragment.html. I don't know how it returns the error and why? Please suggest anything you see that will get me the right result.

Error Stack:

01-03 11:54:55.255: E/AndroidRuntime(363): FATAL EXCEPTION: main
01-03 11:54:55.255: E/AndroidRuntime(363): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.fragment/com.example.fragment.FragmentExampleActivity}: android.view.InflateException: Binary XML file line #5: Error inflating class fragment
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.app.ActivityThread.access$1500(ActivityThread.java:123)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.os.Looper.loop(Looper.java:126)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.app.ActivityThread.main(ActivityThread.java:3997)
01-03 11:54:55.255: E/AndroidRuntime(363):  at java.lang.reflect.Method.invokeNative(Native Method)
01-03 11:54:55.255: E/AndroidRuntime(363):  at java.lang.reflect.Method.invoke(Method.java:491)
01-03 11:54:55.255: E/AndroidRuntime(363):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
01-03 11:54:55.255: E/AndroidRuntime(363):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
01-03 11:54:55.255: E/AndroidRuntime(363):  at dalvik.system.NativeStart.main(Native Method)
01-03 11:54:55.255: E/AndroidRuntime(363): Caused by: android.view.InflateException: Binary XML file line #5: Error inflating class fragment
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:724)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.view.LayoutInflater.inflate(LayoutInflater.java:391)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.view.LayoutInflater.inflate(LayoutInflater.java:347)
01-03 11:54:55.255: E/AndroidRuntime(363):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:224)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.app.Activity.setContentView(Activity.java:1777)
01-03 11:54:55.255: E/AndroidRuntime(363):  at com.example.fragment.FragmentExampleActivity.onCreate(FragmentExampleActivity.java:11)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
01-03 11:54:55.255: E/AndroidRuntime(363):  ... 11 more
01-03 11:54:55.255: E/AndroidRuntime(363): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.fragment$TitlesFragment: make sure class name exists, is public, and has an empty constructor that is public
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.app.Fragment.instantiate(Fragment.java:500)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.app.Fragment.instantiate(Fragment.java:468)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.app.Activity.onCreateView(Activity.java:4081)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:664)
01-03 11:54:55.255: E/AndroidRuntime(363):  ... 20 more
01-03 11:54:55.255: E/AndroidRuntime(363): Caused by: java.lang.ClassNotFoundException: com.example.fragment$TitlesFragment in loader dalvik.system.PathClassLoader[/data/app/com.example.fragment-1.apk]
01-03 11:54:55.255: E/AndroidRuntime(363):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:251)
01-03 11:54:55.255: E/AndroidRuntime(363):  at java.lang.ClassLoader.loadClass(ClassLoader.java:548)
01-03 11:54:55.255: E/AndroidRuntime(363):  at java.lang.ClassLoader.loadClass(ClassLoader.java:508)
01-03 11:54:55.255: E/AndroidRuntime(363):  at android.app.Fragment.instantiate(Fragment.java:490)
01-03 11:54:55.255: E/AndroidRuntime(363):  ... 23 more

layout-land/fragment_layout.xml:

<fragment class="com.example.fragment$TitlesFragment"
        android:id="@+id/titles" android:layout_weight="1"
        android:layout_width="0px" android:layout_height="match_parent" />

<FrameLayout android:id="@+id/details" android:layout_weight="1"
        android:layout_width="0px" android:layout_height="match_parent"
        android:background="?android:attr/detailsElementBackground" />

layout/fragment_layout.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">
    <fragment class="com.example.fragment$TitlesFragment"
            android:id="@+id/titles"
            android:layout_width="match_parent" android:layout_height="match_parent" />
</FrameLayout>
like image 964
Sanat Pandey Avatar asked Jan 23 '26 12:01

Sanat Pandey


2 Answers

Check this out.

make sure class name exists, is public, and has an empty constructor that is public

All subclasses of Fragment must include a public empty constructor. The framework will often re-instantiate a fragment class when needed, in particular during state restore, and needs to be able to find this constructor to instantiate it. If the empty constructor is not available, a runtime exception will occur in some cases during state restore.

Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.fragment$TitlesFragment: make sure class name exists, is public, and has an empty constructor that is public

Also make sure that your fragment class is public

public class MyFragment extends Fragment

when declaring your fragment class. Also, you shouldn't have any constructor in the class. So make sure that you don't have one.

like image 195
MGK Avatar answered Jan 26 '26 03:01

MGK


You need to have the fragment name field as

<fragment
    android:name="my.package.name.classname"
    //other stuff
    />

rather than just putting the name of the class.

like image 41
Tyler Pfaff Avatar answered Jan 26 '26 01:01

Tyler Pfaff



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!