安卓碎片回退栈问题

6

我在我的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();
            }

按预期工作,我可以在点击几次后返回到以前的状态。然而,如果我只深入一层,就会出现以下异常:

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)

基本上,如果我只调用一次replace,当我点击后退按钮时会出错。
此外,在ListFragment中,我是否必须将背景设置为白色?我没有更改它,但我可以看到旧的listview穿过来......
谢谢!

你是怎样将碎片放置在布局中的? - Macarse
我已经在XML中将其定义为ViewGroup R.id.itemContainer的子项。 - runor49
嗯..试着粘贴xml布局。 - Macarse
1个回答

1

好的,你遇到的问题是没有片段可以返回。你可以这样做。 1:检查片段是否存在于后退堆栈中(通过名称),然后禁用后退操作 2:当你第一次启动程序时,在后退堆栈中添加一个片段,就像在点击之前的初始状态一样。即使在这种情况下,你仍然需要检查是否还有可以返回的内容。


但如果没有片段可以返回,它不应该像普通的活动返回一样返回到主屏幕吗? - runor49
好的,我认为你遇到的问题是在onActivityCreated方法中没有填充片段布局。我最近也遇到了类似的问题(就像昨晚一样),如果调用并且onActivityCreate方法没有填充我的列表,则我的片段将显示为空。所以我在onActivityCreate中添加了代码来填充列表(这是从后堆栈中拉出frag时调用的)。尝试一下,在onActivityCreate中使用非必要值填充列表。 - Shaun
我已经改变了我的做事方式,但我会给你答案的信用。谢谢! - runor49
1
@runor49,你能分享一下你最终做了什么吗?或者,为什么你放弃了这个方案? - psychotik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接