FragmentPagerAdapter怪癖并崩溃

时间:2013-04-05 15:26:50

标签: android android-fragments actionbarsherlock android-fragmentactivity fragmentpageradapter

我对Android开发很新,我从一个简单的项目开始学习如何处理大部分基本UI。

我已经使用了ActionBarSherlock和ViewPageIndicator,总体而言我创建的简单应用程序正在运行,但我仍然有一些奇怪的问题。让我来形容一下:

  • 当我单击使用FragmentPageAdapter将片段移动到其位置的按钮时,不会发生我分配给事务的过渡效果。只有当我回去(事务被添加回堆栈)并再次按下按钮时才会发生。
  • 如果我在点击按钮之后返回,然后再次单击它,则会显示片段 - 但是行为很奇怪并且会做出各种奇怪的事情,例如,FragmentPageAdapter认为它有5页而实际上是3页(那些额外的页面只是空白,他们的标题也是)
  • 如果我单击按钮,然后更改设备的方向,应用程序崩溃 - 尝试调试它,但我得到了android框架内的一些代码。

我认为我遇到了所有这些问题,因为我在代码中的某个地方出了问题。请帮助我理解我的问题,如果可以的话,请指出一些好的做法或地方,我无法阅读并理解我做错了什么,以及如何以正确的方式做到。

我将相关代码上传到此处:https://code.google.com/p/mich-android-testapp/source/browse/trunk/TestApp/

我感谢你们的任何帮助!

1 个答案:

答案 0 :(得分:3)

您的代码有几个问题,很可能是您列出的问题的根源。

首先,在正常活动(MainActivity)中声明一个静态片段(一个在xml布局中直接声明的片段),您稍后会尝试在OnClickListener的基类中替换它。这不会很好,因为您不应该使用静态片段进行事务处理。相反,如果你要对它们采取行动,你应该放置一个容器布局,以编程方式添加片段(作为旁注,你应该尝试使用通用id作为替换事务,否则如果你忘记使用相同的完全id在BaseActivity子类中,你会遇到麻烦)。

第二个主要问题是您存储来自ViewPager的片段,并假设这些片段始终是您将使用的片段。当ViewPager将自动重新创建片段时,配置更改后这将失败。

如果您要使用嵌套片段,则必须将getChildFragmentManager()传递给FragmentPagerAdapter的{​​{1}}。

此外,不要使用普通方法将数据传递给片段,因为数据将无法在配置更改中存活(我指的是BasePagerFragment方法)。请改用setPage()

解决此问题后,请查看错误是否仍然存在。