我正在开发一个 android 应用程序,它具有不同的手机和平板电脑布局。在手机上,我的游戏活动布局作为带有 4 个选项卡的选项卡式 UI,我们将它们称为 A、B、C 和 D。我有一个按钮选项卡栏和一个 ViewFlipper,其中包含 4 个片段。因此,当他们点击 C 选项卡时,ViewFlipper 会显示该子项,即 FragmentC。FragmentC 包含一个 ListView。当用户点击一个项目时,我想显示有关该项目的详细视图。因此,FragmentC 添加了一个带有 FragmentTransaction 的新 DetailFragment。这个新的 DetailFragment 完全覆盖了 FragmentC。如果您熟悉 iOS,我基本上是在尝试获得 UINavigationController 类型的行为。这在手机上工作得很好。
在平板电脑上,我的游戏活动布局只是将屏幕分成 4 个相等的象限,分别是 FragmentA、FragmentB、FragmentC 和 FragmentD。这似乎工作得很好,它们都显示得很好。但是,在平板电脑 UI 上,如果我在 FragmentC 的 ListView 中点击其中一项,则会执行代码以添加新片段,但屏幕上没有显示任何内容。
我的手机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>
我的平板电脑gameactivity.xml:
<?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>
手机和平板电脑的 FragmentC 布局 xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/viewRoot" ... >
<ListView android:id="@+id/listView" ... />
</LinearLayout>
当 FragmentC 中的 List 项被点击时,FragmentC 会添加一个新的 DetailFragment,代码如下:
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();
}
在电话上,这工作得很好并且 DetailFragment 出现了。在平板电脑上,调用 pushNewFragment() 方法时没有明显的变化。
有任何想法吗?