Фрагменты Android работают на телефоне, а не на планшете - PullRequest
0 голосов
/ 28 февраля 2012

Я работаю над приложением для Android, которое имеет различные раскладки для телефона и планшета.На телефоне мой макет игровой активности работает как пользовательский интерфейс с вкладками с 4 вкладками, мы будем называть их A, B, C и D. У меня есть панель кнопок и ViewFlipper с 4 фрагментами.Поэтому, когда они нажимают на вкладку C, ViewFlipper показывает тот дочерний элемент, который является FragmentC.FragmentC содержит ListView.Когда пользователь нажимает на элемент, я хочу показать подробный вид этого элемента.Итак, FragmentC добавляет новый DetailFragment с FragmentTransaction.Этот новый DetailFragment полностью охватывает FragmentC.Я в основном пытаюсь получить тип поведения UINavigationController, если вы знакомы с iOS.Это прекрасно работает на телефоне.

На планшете мой макет игровой активности просто делит экран на 4 равных квадранта с FragmentA, FragmentB, FragmentC и FragmentD.Это, кажется, работает просто отлично, все они отображаются просто отлично.Однако, когда в пользовательском интерфейсе планшета я нажимаю на один из элементов в ListView в FragmentC, выполняется код для добавления нового фрагмента, но на экране ничего не отображается.

Мой телефон 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>

XML-макет FragmentC для телефона и планшета:

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

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

</LinearLayout>

При нажатии элемента списка в FragmentCFragmentC добавит новый 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 ().

Есть идеи?

1 Ответ

1 голос
/ 28 февраля 2012

Может быть, у вас есть два LinearLayouts с id из @+id/viewRoot в вашей иерархии (один в gameactivity.xml, другой в xml фрагмента C)?

Я думаю, что по какой-то причине он может пытаться прикрепить фрагмент в неправильной точке иерархии, хотя я не мог сказать, почему это будет проблемой только для одного макета экрана.

Редактировать:

Возможно, файл gameactivity.xml вашего планшета просто не содержит больше места для дальнейших дочерних просмотров.т.е. у вас есть верхний уровень LinearLayout, содержащий двух дочерних LinearLayout s.Я предполагаю, что эти дочерние элементы LinearLayout были настроены с layout_height и layout_width, чтобы обеспечить заполнение родительского элемента.Если затем вы добавите другое представление к родительскому элементу LinearLayout, у него, вероятно, не останется свободного места для рендеринга.

Что если вы оберните родительский элемент LinearLayout в FrameLayout и передадите ему идентификатор@+id/viewRoot s, что новый фрагмент может перекрывать существующие фрагменты?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...