Android fragments Android在手机上工作,但在平板电脑上不工作

Android fragments Android在手机上工作,但在平板电脑上不工作,android-fragments,android,android-tabs,Android Fragments,Android,Android Tabs,我正在开发一款android应用程序,它有不同的手机和平板电脑布局。在手机上,我的游戏活动布局就像一个有4个选项卡的选项卡式用户界面,我们称它们为a、B、C和D。我有一个包含按钮的选项卡栏和一个包含4个片段的ViewFlipper。因此,当他们点击C选项卡时,ViewFlipper将显示片段C的子对象。FragmentC包含一个ListView。当用户点击某个项目时,我想显示该项目的详细视图。因此,FragmentC使用FragmentTransaction添加了一个新的DetailFragme

我正在开发一款android应用程序,它有不同的手机和平板电脑布局。在手机上,我的游戏活动布局就像一个有4个选项卡的选项卡式用户界面,我们称它们为a、B、C和D。我有一个包含按钮的选项卡栏和一个包含4个片段的ViewFlipper。因此,当他们点击C选项卡时,ViewFlipper将显示片段C的子对象。FragmentC包含一个ListView。当用户点击某个项目时,我想显示该项目的详细视图。因此,FragmentC使用FragmentTransaction添加了一个新的DetailFragment。这个新的DetailFragment完全覆盖了FragmentC。如果你熟悉iOS的话,我基本上是想得到一个UINavigationController类型的行为。这在电话上很好用

在平板电脑上,我的游戏活动布局将屏幕分成4个相等的象限,分别为FragmentA、FragmentB、FragmentC和FragmentD。这看起来很好,它们都显示得很好。但是,在tablet UI上,如果我点击FragmentC中ListView中的一个项目,代码将被执行以添加新片段,但屏幕上没有显示任何内容

My phone gameactivity.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/viewRoot" ...>
    <LinearLayout android:id="@+id/tabBarRoot" ...>
        <Button ... />
        <Button ... />
        <Button ... />
        <Button ... />
    </LinearLayout>

    <ViewFlipper android:id="@+id/viewFlipperMainMenu" ...>
        <fragment class="FragmentA" ... />
        <fragment class="FragmentB" ... />
        <fragment class="FragmentC" ... />
        <fragment class="FragmentD" ... />
    </ViewFlipper>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/viewRoot" ... >
    <LinearLayout ... >
        <fragment class="FragmentB" ... />
        <fragment class="FragmentA" ... />
    </LinearLayout>

    <LinearLayout ... >
        <fragment class="FragmentC" ... />
        <fragment class="FragmentD" ... />
    </LinearLayout>

</LinearLayout>
在电话上,这一切都很好,而且细节片段也出现了。在平板电脑上,调用pushNewFragment()方法时不会发生任何明显的变化


有什么想法吗?

可能是因为您的层次结构中有两个
线性布局
,其
id
@+id/viewRoot
(一个在gameactivity.xml中,一个在片段C的xml中)

我认为它可能出于某种原因试图将片段附加到层次结构中的错误点,尽管我无法解释为什么这只会是一个屏幕布局的问题

编辑:

可能是平板电脑的gameactivity.xml没有更多的空间容纳更多的子视图。i、 e.您有一个顶级
LinearLayout
包含两个子
LinearLayout
s。我猜那些子
LinearLayout
s已经配置了
layout\u高度
layout\u宽度
,以确保它们填充了父级。如果随后将另一个视图添加到父视图
LinearLayout
,则该视图可能没有剩余空间进行渲染


如果将父级
LinearLayout
包装在
FrameLayout
中,并指定新片段可以覆盖现有片段的
@+id/viewRoot
s的id,该怎么办

这也是我的第一个想法,但在平板电脑布局和手机布局中有两个
@+id/viewRoot
元素。我试着改变ID只是为了确定,但没有任何效果。我需要做更多的实验,但框架布局似乎正在朝解决方案迈进。我的FragmentC确实出现了,尽管由于屏幕上有多个位置的id为viewRoot,它出现在了错误的位置。。。这是需要更多工作的部分。谢谢
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/viewRoot" ... >

    <ListView android:id="@+id/listView" ... />

</LinearLayout>
public void pushNewFragment(Fragment fragment, String description) {
    FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
    FragmentTransaction transaction = fragmentManager.beginTransaction();

    transaction.add(R.id.viewRoot, fragment).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .addToBackStack(description).commit();
}