【问题标题】:android Fragment issue with orientation change方向改变的android片段问题
【发布时间】:2013-04-04 14:27:27
【问题描述】:

我定义了活动和两个布局:

  1. 大地布局
  2. 布局

第一种布局适用于横向模式下的大屏幕,第二种布局适用于其他情况。 第一个布局包含:

  1. 片段1
  2. 片段2

第二个布局包含:

  1. 片段1

当我在大屏幕上以横向模式启动应用程序时,Activity.onCreate() 中调用的 getSupportFragmentManager().findFragmentById() 正确返回两个片段。将方向更改为纵向后,getSupportFragmentManager().findFragmentById()fragment2 返回非 null,但它应该返回 null,因为此布局中未定义此片段。问题是返回的片段对象不正确,我在访问它时得到null 指针异常。应该是null,不是吗?

【问题讨论】:

    标签: android fragment android-orientation


    【解决方案1】:

    其实……我觉得不应该是null

    layout-large-land 布局显示在Activity 中后,Activity 将在FragmentManager 中添加Fragments。一旦你旋转了你的ActivityFragmentManager 会保留它的状态,Fragments 在里面,它仍然有Fragment2,这就是为什么findFragmentById() 不返回null

    Fragment2 会在那里,但不会附加到Activity,您可以使用fragment.isAdded()fragment.isVisible() 进行检查。

    如果在您的情况下,您想知道您的 2 窗格(横向)还是 1 窗格(纵向),也许您应该进行以下检查:findViewById(R.id.secondFragmentContainer)==null

    【讨论】:

    • 假设您在 fragment1 上有 1 个按钮,并且活动以纵向布局显示。你想打开 fragment2 被点击。在它被点击之后 fragment2 被打开到目前为止一切正常,我的问题从这里开始,当我将方向从纵向更改为横向时,fragment1 不可见。即使我改变了方向,我怎么能提供 fragment1 和 fragment2 应该站在一起?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多