简体   繁体   English

Android Fragment backStack问题

[英]Android Fragment backStack issue

I have the following code in my Activity: 我的Activity中有以下代码:

     public void categoryClicked(int categoryId, String categoryName) {                 


ItemList newFragment = ItemList.newInstance(categoryId);
                    FragmentTransaction ft = getFragmentManager().beginTransaction();
                    ft.replace(R.id.itemContainer, newFragment);
                    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    ft.addToBackStack(null);           
                    ft.commit();
            }

It works as expected, I am able to go back after clicking a few times to the previous states. 它按预期工作,我可以在点击几次之前回到以前的状态。 However, if I only go one deep, I get the following exception: 但是,如果我只深入一个,我会得到以下异常:

03-10 22:17:19.895: ERROR/AndroidRuntime(23075): java.lang.IllegalStateException: Content view not yet created
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.app.ListFragment.ensureList(ListFragment.java:377)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.app.ListFragment.getListView(ListFragment.java:277)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at com.xxxxx.fragment.ItemList.onActivityCreated(ItemList.java:67)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:749)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:921)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:639)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1254)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:402)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.app.Activity.onBackPressed(Activity.java:2057)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.app.Activity.onKeyDown(Activity.java:1953)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.view.KeyEvent.dispatch(KeyEvent.java:2335)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.app.Activity.dispatchKeyEvent(Activity.java:2236)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1648)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.view.ViewRoot.deliverKeyEventPostIme(ViewRoot.java:2682)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2655)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1952)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.os.Looper.loop(Looper.java:126)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at android.app.ActivityThread.main(ActivityThread.java:3997)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at java.lang.reflect.Method.invokeNative(Native Method)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at java.lang.reflect.Method.invoke(Method.java:491)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):     at dalvik.system.NativeStart.main(Native Method)

So basically, if I only call the replace once, it errors out on my when I hit the back button. 所以基本上,如果我只调用一次替换,当我按下后退按钮时,它会出错。

Also, with ListFragment, do I have to set the background to white? 另外,使用ListFragment,我是否必须将背景设置为白色? I didn't touch it and I can see the old listview showing through.... 我没碰到它,我可以看到旧的列表视图显示....

Thanks! 谢谢!

Well, the problem you are running into is there are no fragments to go back to. 那么,你遇到的问题是没有片段可以回去。 This is what you can do. 这就是你能做的。 1: Check to see if the fragment exists in the backstack (by giving it a name) and then disable going back 2: When you first start you program, add a fragment to the backstack, like an initial state before its clicked. 1:检查片段是否存在于backstack中(通过给它命名)然后禁用返回2:当你第一次启动程序时,在backstack中添加一个片段,就像它点击之前的初始状态一样。 Even in this situation though, your still going to need to do a chck to see if there is anything left in the backstack to go back to. 即使在这种情况下,你仍然需要做一个chck,看看是否有任何东西留在靠背中回去。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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