2011-03-11 107 views
6

我在我的活动下面的代码:Android的碎片堆栈中的问题

 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) 

所以基本上,如果我只叫更换一次,错误出在我的时候我打的后退按钮。

此外,与ListFragment,我必须将背景设置为白色?我没有碰它,我可以看到旧的列表显示通过...

谢谢!

+0

你如何将碎片放置在布局中? – Macarse 2011-03-15 21:09:40

+0

我把它定义为ViewGroup R.id.itemContainer – runor49 2011-03-15 21:32:22

+0

mmm的孩子。尝试粘贴xml布局。 – Macarse 2011-03-15 21:35:42

回答

1

那么,你遇到的问题是没有片段可以回去。这是你可以做的。 1:检查片段是否存在于后台(通过给它一个名字),然后禁用返回 2:当你第一次启动你的程序时,添加一个片段到后台堆栈,就像它被点击之前的初始状态。即使在这种情况下,你仍然需要做一些事情来查看是否有任何东西留在了堆栈里。

+0

但是如果没有碎片可以返回,它不应该像回常规活动一样回到主屏幕吗? – runor49 2011-03-30 04:42:07

+0

好点。我认为你遇到的问题是片段布局不会被填充到onActivityCreated方法中。最近我有一个类似的问题(如昨晚),如果我的片段被调用并且onActivityCreate方法没有填充我的列表,我的片段显示为空。所以我做的是我添加了代码来填充onActivityCreate中的列表(这是从后台堆栈中取出一个frag时调用的)。试试看,只需在onActivityCreate上填充非必需值列表 – Shaun 2011-03-30 15:34:11

+0

这应该摆脱你的上下文视图而不是创建错误。 – Shaun 2011-03-30 15:35:19