简体   繁体   中英

android.view.InflateException on screen rotation

I've been working on getting fragments to work for a project and all is well with the fragments until i rotate the screen after changing the details fragment, when i rotate the screen after making a selection it crashed to the dashboard with the following errors (i have the fragment debugger enabled if that helps)

02-27 20:08:01.194: V/FragmentManager(32480): movefrom RESUMED: Detail{42311948 #0   id=0x7f0a0007}
02-27 20:08:01.194: V/FragmentManager(32480): movefrom RESUMED: HomeMenuItems{42314338 #1 id=0x7f0a0008}
02-27 20:08:01.194: V/FragmentManager(32480): movefrom RESUMED: ChoosePDFActivity{4234be08 #2 id=0x7f0a0007}
02-27 20:08:01.194: V/FragmentManager(32480): Saved state of Detail{42311948 #0 id=0x7f0a0007}: null
02-27 20:08:01.194: V/FragmentManager(32480): Saved state of HomeMenuItems{42314338 #1   id=0x7f0a0008}: Bundle[{android:view_state={16711681=android.view.AbsSavedState$1@416dbfb0,       16711682=android.view.AbsSavedState$1@416dbfb0,   16711683=android.view.AbsSavedState$1@416dbfb0, 16908298=AbsListView.SavedState{42359778       selectedId=-9223372036854775808 firstId=-1 viewTop=0 position=0 height=1424 filter=null   checkState=null}}}]
02-27 20:08:01.204: V/FragmentManager(32480): Saved state of ChoosePDFActivity{4234be08 #2 id=0x7f0a0007}: Bundle[{android:view_state={16908298=AbsListView.SavedState{4235cab8 selectedId=-9223372036854775808 firstId=-1 viewTop=0 position=0 height=514 filter=null checkState=null}, 2131361801=android.view.AbsSavedState$1@416dbfb0}}]
02-27 20:08:01.214: V/FragmentManager(32480): saveAllState: adding fragment #0: Detail{42311948 #0 id=0x7f0a0007}
02-27 20:08:01.214: V/FragmentManager(32480): saveAllState: adding fragment #1: HomeMenuItems{42314338 #1 id=0x7f0a0008}
02-27 20:08:01.214: V/FragmentManager(32480): saveAllState: adding fragment #2: ChoosePDFActivity{4234be08 #2 id=0x7f0a0007}
02-27 20:08:01.214: V/FragmentManager(32480): movefrom STARTED: Detail{42311948 #0 id=0x7f0a0007}
02-27 20:08:01.214: V/FragmentManager(32480): movefrom STARTED: HomeMenuItems{42314338 #1 id=0x7f0a0008}
02-27 20:08:01.214: V/FragmentManager(32480): movefrom STARTED: ChoosePDFActivity{4234be08 #2 id=0x7f0a0007}
02-27 20:08:01.214: V/FragmentManager(32480): movefrom STOPPED: Detail{42311948 #0 id=0x7f0a0007}
02-27 20:08:01.214: V/FragmentManager(32480): movefrom STOPPED: HomeMenuItems{42314338 #1 id=0x7f0a0008}
02-27 20:08:01.214: V/FragmentManager(32480): movefrom STOPPED: ChoosePDFActivity{4234be08 #2 id=0x7f0a0007}
02-27 20:08:01.214: V/FragmentManager(32480): movefrom ACTIVITY_CREATED: Detail{42311948 #0 id=0x7f0a0007}
02-27 20:08:01.214: V/FragmentManager(32480): movefrom CREATED: Detail{42311948 #0 id=0x7f0a0007}
02-27 20:08:01.214: V/FragmentManager(32480): Freeing fragment index Detail{42311948 #0 id=0x7f0a0007}
02-27 20:08:01.214: V/FragmentManager(32480): movefrom ACTIVITY_CREATED: HomeMenuItems{42314338 #1 id=0x7f0a0008}
02-27 20:08:01.214: V/FragmentManager(32480): movefrom CREATED: HomeMenuItems{42314338 #1 id=0x7f0a0008}
02-27 20:08:01.214: V/FragmentManager(32480): Freeing fragment index HomeMenuItems{42314338 #1 id=0x7f0a0008}
02-27 20:08:01.214: V/FragmentManager(32480): movefrom ACTIVITY_CREATED: ChoosePDFActivity{4234be08 #2 id=0x7f0a0007}
02-27 20:08:01.224: V/FragmentManager(32480): movefrom CREATED: ChoosePDFActivity{4234be08 #2 id=0x7f0a0007}
02-27 20:08:01.224: V/FragmentManager(32480): Freeing fragment index ChoosePDFActivity{4234be08 #2 id=0x7f0a0007}
02-27 20:08:01.244: V/FragmentManager(32480): Instantiated fragment Detail{42364658 #0 id=0x7f0a0007}
02-27 20:08:01.244: V/FragmentManager(32480): restoreAllState: active #0: Detail{42364658 #0 id=0x7f0a0007}
02-27 20:08:01.244: V/FragmentManager(32480): Instantiated fragment HomeMenuItems{42365038 #1 id=0x7f0a0008}
02-27 20:08:01.244: V/FragmentManager(32480): restoreAllState: active #1: HomeMenuItems{42365038 #1 id=0x7f0a0008}
02-27 20:08:01.254: V/FragmentManager(32480): Instantiated fragment ChoosePDFActivity{42365a28 #2 id=0x7f0a0007}
02-27 20:08:01.254: V/FragmentManager(32480): restoreAllState: active #2: ChoosePDFActivity{42365a28 #2 id=0x7f0a0007}
02-27 20:08:01.254: V/FragmentManager(32480): restoreAllState: added #0: Detail{42364658 #0 id=0x7f0a0007}
02-27 20:08:01.254: V/FragmentManager(32480): restoreAllState: added #1: HomeMenuItems{42365038 #1 id=0x7f0a0008}
02-27 20:08:01.254: V/FragmentManager(32480): restoreAllState: added #2: ChoosePDFActivity{42365a28 #2 id=0x7f0a0007}
02-27 20:08:01.254: V/FragmentManager(32480): moveto CREATED: ChoosePDFActivity{42365a28 #2 id=0x7f0a0007}
02-27 20:08:01.264: V/FragmentActivity(32480): onCreateView: id=0x7f0a0007 fname=ca.nait.myartego.Detail existing=ChoosePDFActivity{42365a28 #2 id=0x7f0a0007}
02-27 20:08:01.264: D/AndroidRuntime(32480): Shutting down VM
02-27 20:08:01.264: W/dalvikvm(32480): threadid=1: thread exiting with uncaught exception (group=0x41616ba8)
02-27 20:08:01.264: E/AndroidRuntime(32480): FATAL EXCEPTION: main
02-27 20:08:01.264: E/AndroidRuntime(32480): Process: com.artifex.mupdf, PID: 32480
02-27 20:08:01.264: E/AndroidRuntime(32480): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.artifex.mupdf/ca.nait.myartego.HomeActivity}: android.view.InflateException: Binary XML file line #34: Error inflating class fragment
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3738)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.app.ActivityThread.access$900(ActivityThread.java:135)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1202)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.os.Handler.dispatchMessage(Handler.java:102)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.os.Looper.loop(Looper.java:136)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.app.ActivityThread.main(ActivityThread.java:5017)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at java.lang.reflect.Method.invokeNative(Native Method)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at java.lang.reflect.Method.invoke(Method.java:515)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at dalvik.system.NativeStart.main(Native Method)
02-27 20:08:01.264: E/AndroidRuntime(32480): Caused by: android.view.InflateException: Binary XML file line #34: Error inflating class fragment
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.app.Activity.setContentView(Activity.java:1929)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at ca.nait.myartego.HomeActivity.onCreate(HomeActivity.java:16)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.app.Activity.performCreate(Activity.java:5231)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
02-27 20:08:01.264: E/AndroidRuntime(32480):    ... 12 more
02-27 20:08:01.264: E/AndroidRuntime(32480): Caused by: java.lang.IllegalStateException: Fragment ca.nait.myartego.Detail did not create a view.
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:314)
02-27 20:08:01.264: E/AndroidRuntime(32480):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
02-27 20:08:01.264: E/AndroidRuntime(32480):    ... 23 more

My xml file that holds the two fragments:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@color/app_background_color"
    tools:context=".MainActivity" >

    <ImageButton
        android:id="@+id/live_feed_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:background="@drawable/button_style"
        android:contentDescription="@string/live_feed"
        android:minHeight="200dp" 
        android:scaleType="fitXY"
        android:src="@drawable/img2"/>

    <View android:id="@+id/strut"
        android:layout_width="0dp"
        android:layout_height="0dp" 
        android:layout_centerHorizontal="true"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="1.49" 
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/live_feed_button"
            android:layout_alignLeft="@id/strut"
            android:gravity="right">

        <fragment
            android:id="@+id/detail"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="fill_parent"

            class="ca.nait.myartego.Detail" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="3"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/live_feed_button" 
        android:layout_alignRight="@id/strut">

    <fragment
        android:id="@+id/list"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="fill_parent"

        class="ca.nait.myartego.HomeMenuItems" />
    </LinearLayout>
</RelativeLayout>

Main page activity:

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

     }

    @Override
    public void onBackPressed()
    {
        super.onBackPressed();
        overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
    }
}

The List fragment code:

public class HomeMenuItems extends ListFragment
    {
        // items on menu
        String[] menuItems =
        { "Catalogue", "Events", "Find Us", "Contact Us", "Professional Login" };
        boolean case_0 = false, case_1 = false, case_2 = false, case_3 = false,
                case_4 = false;

        @SuppressLint("NewApi")
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
        }

        @Override
        public void onActivityCreated(Bundle savedInstanceState)
        {
            super.onActivityCreated(savedInstanceState);
            setListAdapter(new ArrayAdapter<String>(getActivity(),R.layout.menu_item, menuItems));
            FragmentManager.enableDebugLogging(true);
        }

        @Override
        public void onListItemClick(ListView list, View v, int position, long id)
        {
            System.out.println("test");
            Fragment newFragment = null;
            FragmentManager fm = getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();

            switch (position)
            {
            case 0:
                if (!case_0)
                {
                    newFragment = new ChoosePDFActivity();
                    ft.setCustomAnimations(R.anim.push_left_in, R.anim.push_left_out);
                    ft.replace(R.id.detail, newFragment);
                    ft.disallowAddToBackStack().commit();

                    case_0 = true;
                    case_1 = false;
                    case_2 = false;
                    case_3 = false;
                    case_4 = false;
                }
                break;

            case 1:
                if (!case_1)
                {
                    case_1 = true;
                    newFragment = new EventsActivity();
                    ft.setCustomAnimations(R.anim.push_left_in, R.anim.push_left_out);
                    ft.replace(R.id.detail, newFragment);
                    ft.disallowAddToBackStack().commit();

                    case_0 = false;
                    case_2 = false;
                    case_3 = false;
                    case_4 = false;
                }
                break;

            case 2:
                if (!case_2)
                {
                    case_2 = true;
                    newFragment = new MapsActivity();
                    ft.setCustomAnimations(R.anim.push_left_in, R.anim.push_left_out);
                    ft.replace(R.id.detail, newFragment);
                    ft.disallowAddToBackStack().commit();

                    case_0 = false;
                    case_1 = false;
                    case_3 = false;
                    case_4 = false;
                }
                break;

            case 3:
                if (!case_3)
                {
                    case_3 = true;
                    newFragment = new ContactsActivity();
                    ft.setCustomAnimations(R.anim.push_left_in, R.anim.push_left_out);
                    ft.replace(R.id.detail, newFragment);
                    ft.disallowAddToBackStack().commit();

                    case_0 = false;
                    case_1 = false;
                    case_2 = false;
                    case_4 = false;
                }
                break;

            case 4:
                if (!case_4)
                {
                    case_4 = true;
                    newFragment = new LoginActivity();
                    ft.setCustomAnimations(R.anim.push_left_in, R.anim.push_left_out);
                    ft.replace(R.id.detail, newFragment);
                    ft.disallowAddToBackStack().commit();

                    case_0 = false;
                    case_1 = false;
                    case_2 = false;
                    case_3 = false;
                }
                break;
            }
        }

    }

Here is the Detail Fragment

public class Detail extends Fragment{
    View view;
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
    }

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

}

Looks like identical problem solved in here:

Fragments and rotating screen problems

Basically, the problem is solved by dynamically adding Fragment to screen, without declaring it explicitly in XML.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM