我正在为手机和平板电脑有不同的布局的Android应用程序。在手机上,我的游戏活动布局作为一个带有4个选项卡的选项卡式UI,我们称它们为A,B,C和D.我有一个带有4个片段的按钮选项卡和ViewFlipper。所以当他们点击C选项卡时,ViewFlipper会显示该子项是FragmentC。 FragmentC包含一个ListView。当用户点击一个项目时,我想显示关于该项目的详细视图。因此,FragmentC添加了一个带有FragmentTransaction的新的DetailFragment。这个新的DetailFragment完全覆盖了FragmentC。我基本上试图得到一个UINavigationController类型的行为,如果你熟悉iOS。这在手机上工作得很好。Android的片段在手机上工作,但不是平板电脑
在平板电脑上,我的游戏活动布局将屏幕分割为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中点击,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()方法时,不会出现任何明显的情况。
任何想法?
这是我的第一个想法,但平板电脑布局中还有两个'@ + id/viewRoot'元素以及电话布局。我试图改变ID来确保,但没有任何效果。 – 2012-02-27 21:52:21
更新 - 希望有所帮助。 – tomtheguvnor 2012-02-27 21:59:36
我需要做更多的尝试,但FrameLayout似乎正在朝着解决方案前进。我的FragmentC确实出现了,尽管因为屏幕上的多个地方被视为viewRoot,它显示在错误的地方......这是需要更多工作的部分。谢谢! – 2012-02-27 22:18:38