私は、携帯電話とタブレットでレイアウトが異なるAndroidアプリに取り組んでいます。携帯電話では、私のゲーム アクティビティ レイアウトは、4 つのタブを持つタブ付き UI として機能します。これらを A、B、C、D と呼びます。ボタンのタブバーと、4 つのフラグメントを持つ ViewFlipper があります。したがって、C タブをタップすると、ViewFlipper はその子である FragmentC を表示します。FragmentC には ListView が含まれています。ユーザーがアイテムをタップすると、そのアイテムの詳細ビューを表示したいと考えています。そのため、FragmentC は FragmentTransaction を使用して新しい DetailFragment を追加します。この新しい DetailFragment は FragmentC を完全にカバーします。あなたがiOSに精通しているなら、私は基本的にUINavigationControllerタイプの動作を得ようとしています。これは、電話で問題なく動作します。
タブレットでは、私のゲーム アクティビティ レイアウトは画面を FragmentA、FragmentB、FragmentC、FragmentD の 4 つの等しい象限に分割するだけです。それは問題なく動作しているように見えます。それらはすべて問題なく表示されます。ただし、タブレット UI では、FragmentC の ListView のアイテムの 1 つをタップすると、コードが実行されて新しいフラグメントが追加されますが、画面には何も表示されません。
私の電話の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() メソッドが呼び出されても目に見えることはありません。
何か案は?