2011-03-11 106 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