我正在開發一個簡單的基於片段的應用程序,帶有單獨的FragmentActivity。應用程序的每個「屏幕」都包含在一個片段中,並且在應用程序啓動時將所有片段添加到容器佈局。Android - 後退按鈕和片段backstack不起作用
// Set up fragments in Main Activity
fragMan = getFragmentManager();
FragmentTransaction ft = fragMan.beginTransaction();
ft.add(R.id.fragment_container, settingsFragment);
ft.add(R.id.fragment_container, mapFragment);
ft.add(R.id.fragment_container, tracksFragment);
ft.add(R.id.fragment_container, waypointsFragment);
ft.commit();
轉換是通過隱藏當前可見的片段,然後顯示適當的片段來完成的。
ft = fragMan.beginTransaction();
ft.show(mapFragment);
ft.addToBackStack(null);
ft.commit();
這一切工作正常,但按下後退按鈕時,應用程序退出,無論哪個屏幕是可見的還是什麼以前的交易已被添加到後退堆棧。
我已經檢查過,以確保返回堆棧正確地累積記錄並嘗試過渡方法的許多不同變體,例如替換片段而不是隱藏/顯示它們,創建片段的新實例而不是將它們存儲在變量中,等等。據我所知,我的代碼與我可以找到的所有教程和示例相匹配,而且我甚至還找不到類似的問題/類似問題的例子,這可能是因爲標準實現「適用於」其他。
我懷疑它可能是應用程序級別的問題,例如我的清單中的一個屬性(我已經詳細調查過)或者我的應用程序設置的方式固有的東西,這會阻止後退按鈕正常工作。我可以重寫onBackPressed來手動處理轉換,但這似乎是一個非常醜陋的解決方法。任何想法爲什麼這可能不像預期的那樣行事?順便說一下,這是運行Jelly Bean的Nexus 7。