【发布时间】:2013-06-04 17:00:47
【问题描述】:
我的活动有 2 种不同的纵向和横向 xml 布局。我试图在方向改变时使用相同的片段,该代码在 Activity 的 onCreate() 中:
if (savedInstanceState == null) {
frag = Fragment
.instantiate(this, PlayerControlsFragment.class.getName());
} else {
frag = fragmentManager.findFragmentByTag(FRAG_TAG);
}
然后,取决于方向:
private void initLandscapePlayerFragment(FragmentTransaction ft) {
ft.add(R.id.layout_center_top, frag);
}
private void initPortraitPlayerFragment(FragmentTransaction ft) {
ft.add(R.id.layout_left_top, frag);
}
它给了我一个很好的
IllegalStateException: 无法更改片段 Frag 的容器 ID
确实,当我在两个 xml 中使用相同的容器 id 时,它可以工作,但在我的情况下它不是一个解决方案。
我尝试了不同的随机解决方案(在破坏活动之前分离等)但没有成功..
有什么想法吗?
【问题讨论】:
-
为什么容器需要不同的id?
-
嗯,不管是纵向还是横向,我的布局结构都完全不同...
-
并且由于纵向模式仅对我的所有片段使用一个容器(由操作栏导航选项卡切换),我不能在两种模式下使用相同的容器 ID(横向显示 3 个容器中的所有 3 个片段)跨度>
-
我明白了。然后,也许做一些类似于典型的 Shakespare 片段示例的事情,并为这些情况使用单独的活动,就像他们将一个活动用于小屏幕,另一个用于平板电脑,并控制主要活动。
-
实际上他们似乎没有使用不同的活动,绝对不是2种不同的导航模式..
标签: android fragment illegalstateexception