3

我對android開發很新穎,我從一個簡單的項目開始學習如何處理大部分的基本UI。FragmentPageAdapter的怪癖和崩潰

我已經使用了ActionBarSherlock和ViewPageIndicator,並且總體而言,我創建的簡單應用程序正在工作,但我仍然有一些奇怪的問題。讓我來描述一下:

  • 當我點擊FragmentPageAdapter將片段移動到其位置的按鈕時,我分配給事務的轉換效果不會發生。只有當我返回時纔會發生(交易被添加回堆棧)並再次按下按鈕。
  • 如果我點擊按鈕後返回,然後再次單擊它,會顯示片段 - 但會表現出奇怪的現象,並且會執行各種奇怪的操作,例如,FragmentPageAdapter認爲它有5個頁面,而實際上它是3個額外的頁面只是空白,他們的標題也是)
  • 如果我點擊按鈕,然後更改設備的方向,應用程序崩潰 - 嘗試調試它,但我得到一些代碼在android框架內。

我想我遇到了所有這些問題,因爲我在代碼中的某處出錯了。請幫我理解我的問題,如果可以的話,請告訴我一些好的做法或者我無法閱讀和理解我做錯了什麼的地方,以及如何以正確的方式做到這一點。

我上傳的代碼中的問題在這裏:https://code.google.com/p/mich-android-testapp/source/browse/trunk/TestApp/

我感謝所有幫助,從你們!

回答

3

您的代碼有幾個問題,它們很可能是您列出的問題的根源。

首先,您在正常活動(MainActivity)中聲明一個靜態片段(直接在xml佈局中聲明的片段),稍後您將在OnClickListener的基類中替換它。這不會很好,因爲您不應該使用靜態碎片進行交易。相反,你應該放置一個容器佈局,在其中以編程方式添加片段(如果你要對它們進行操作)(作爲附註,你應該嘗試使用替代事務的通用標識符,否則如果你忘記使用相同的確切ID在BaseActivity子類中你會遇到麻煩)。

第二個主要問題是,您存儲ViewPager中的片段,並假定這些片段始終是您要使用的片段。當ViewPager將自動重新創建片段時,配置更改後這將失敗。

如果要使用嵌套片段,則必須將getChildFragmentManager()BasePagerFragment傳遞到FragmentPagerAdapter

另外,不要用普通的方法將數據傳遞給片段,因爲這些數據在配置變更時無法生存(我指的是setPage()方法)。改爲使用Bundle

解決這個問題後,看看是否仍然出現錯誤。

+0

非常感謝你!通過使用LinearLayout作爲容器而不是片段來解決崩潰問題,否則通過使用bundle,getChildFragmentManager()來解決,而不是保存充氣的子片段。 – 2013-04-15 15:55:13