【问题标题】:Swap two fragment simultaneously同时交换两个片段
【发布时间】:2012-02-01 07:02:37
【问题描述】:

在我的应用程序中,我有一个活动,我在运行时添加了两个片段。我需要同时交换这两个片段。片段 1 包含一个按钮,当我单击该按钮时,我想要片段 1 移动到屏幕的右侧,而其他片段移动到活动的左侧。

在按钮的 onClick 方法中,我尝试了类似的方法

    @Override
    public void onClick(View v) {
         FragmentTransaction ft = getFragmentManager().beginTransaction();
         Fragment newFragment = getFragmentManager().findFragmentById(R.id.pageA);
         ft.remove(newFragment);
         Fragment newFragmentB = getFragmentManager().findFragmentById(R.id.pageB);
         ft.remove(newFragmentB);
         ft.add(R.id.pageB, newFragment);
         ft.add(R.id.pageA, newFragmentB);
         ft.addToBackStack(null);
         ft.commit();
     }

但我收到以下错误

 java.lang.IllegalStateException: Can't change container ID of fragment PageA{40653da0   #0 id=0x7f060001}: was 2131099649 now 2131099650

当我单击页面 A 上的按钮时,我想要这样的东西,然后页面 A 和页面 B 的位置应该相互交换。

【问题讨论】:

    标签: android


    【解决方案1】:

    我有一个类似的问题(IllegalStateException: Can't change container ID of Fragment),我通过交换容器而不是碎片来解决......尽管如此,我仍然不知道是否可以直接交换碎片。正如我在上述帖子中所写,它似乎只适用于 ics!

    【讨论】:

    • 即我还发现它不适用于蜂窝。我从未在 ICS 上尝试过。那么可能是安卓问题
    • 只要您在两个单独的事务中删除和添加片段,它就可以在 ICS 上运行(查看上面的链接以了解它是如何完成的)
    【解决方案2】:

    我针对类似问题发布了此问题的解决方案。我的方法是重新创建片段,但通过先保存状态并将其重新应用到新实例来保持状态。

    见https://stackoverflow.com/a/14951987/599614。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多