Android fragments Android在手机上工作,但在平板电脑上不工作
我正在开发一款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: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
<?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();
}