代码之家  ›  专栏  ›  技术社区  ›  Michael S.

FragmentPageAdapter的怪癖和崩溃

  •  3
  • Michael S.  · 技术社区  · 13 年前

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

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

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

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

    我将有问题的代码上传到了这里: https://code.google.com/p/mich-android-testapp/source/browse/trunk/TestApp/

    我很感激你们的帮助!

    1 回复  |  直到 13 年前
        1
  •  3
  •   user Roman    13 年前

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

    首先,您在普通活动(MainActivity)中声明一个静态片段(直接在xml布局中声明的片段),稍后您将尝试在 OnClickListener 。这不会很好,因为您不应该使用静态片段进行事务。相反,您应该放置一个容器布局,如果您要对其进行操作,则可以在其中以程序方式添加片段(作为附带说明,您应该尝试为替换事务使用通用id,否则,如果您忘记在BaseActivity子类中使用相同的确切id,您将遇到麻烦)。

    第二个主要问题是存储 ViewPager 并假设这些将永远是你将要处理的片段。当 查看寻呼机 将自动重新创建片段。

    如果你要使用嵌套片段,那么你必须通过 getChildFragmentManager() FragmentPagerAdapter 来自 BasePagerFragment .

    此外,不要用普通方法将数据传递给片段,因为这些数据在配置更改后将无法保存(我指的是 setPage() 方法)。使用 Bundle 相反

    解决这些问题后,请查看错误是否仍会出现。