【问题标题】:Move Fragment from view pager to another container将片段从视图寻呼机移动到另一个容器
【发布时间】:2016-10-23 07:52:27
【问题描述】:

更新 好的,我想出了问题所在。我尝试按标签查找片段,但是当我将其添加到适配器时,我无法为片段设置标签。 但是不知道怎么添加。

我在我的应用中使用横向和纵向。横向布局包含两个约束布局,纵向布局包含一个带有片段状态分页器的视图页面。我有一个带有回收器视图的片段和另一个带有饼图的片段。当我将手机从陆地旋转到纵向时,出现异常,片段容器具有不同的 ID,因此我在再次添加之前从片段管理器中删除了片段。它解决了异常,但在这种情况下,我无法保留回收视图的状态。 我该怎么做

【问题讨论】:

  • 按状态表示,滚动位置?或者你不想加载recycler的所有数据?
  • 你试过我在回答中提到的吗?设置保留实例?
  • 我试过了,但在这种情况下,我得到了这个异常:java.lang.RuntimeException: Unable to start activity ComponentInfo{hu.astron.rectruiting/hu.astron.rectruiting.MainActivity}: java. lang.IllegalArgumentException:没有为片段 PersonsFragment{f9530d7 #0 id=0x7f0b005a} 找到 id 0x7f0b005a (hu.astron.rectruiting:id/pager) 的视图

标签: android android-viewpager fragment


【解决方案1】:

我不确定,但这个函数说,它会保留片段状态。你可能想试试这个:

setRetainInstance

来自Android Docs

它不会只销毁和重新创建 Fragment。

【讨论】:

  • 谢谢,但我的问题不完全是保留片段状态,我将其添加到寻呼机后无法将其添加到容器中。
  • 是的,同一个片段不能放在两个视图中。 AFAIK
【解决方案2】:

好的,如果您想在方向更改时阻止您的应用重新创建。将此行 android:configChanges="orientation|screenSize" 添加到您的 AndroidManifest.xml 文件中的活动中。此行会停止在方向更改时重新创建应用程序,它只会更改方向。

例子

<activity android:name=".MainActivity"
    android:configChanges="orientation|screenSize" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

【讨论】:

  • 不重新创建,横向和纵向如何使用不同的布局?
  • 谢谢,我的问题不在于保留片段状态。我的问题是,在没有调用 fragmentManager.remove() 的情况下将片段添加到 FragmentStatePagerAdapter 后,我无法将其添加到容器中。但是,您可以通过覆盖 onConfigurationChanged() 方法来处理方向更改
  • @Farhan,是的,我的错,没有考虑到这一点。
【解决方案3】:

最后我弄清楚了问题所在。 在将片段添加到寻呼机之前,我必须通过 add(fragment, tag) 设置标签。 错了,我没有给片段设置标签,所以当我试图通过标签找到片段时,它是空的,我总是创建一个新的实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    相关资源
    最近更新 更多