Фрагмент обновления с новым фрагментом Android - PullRequest
3 голосов
/ 05 июня 2011

У меня есть макет

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" 
    android:layout_width="fill_parent" android:layout_height="wrap_content" >
    <LinearLayout android:id="@+id/linearLayout1" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_width="wrap_content">
        <LinearLayout android:id="@+id/linearLayout13" android:layout_height="wrap_content" android:paddingRight="70dp" android:orientation="vertical" android:paddingLeft="70dp" android:layout_width="wrap_content">
            <ImageView android:id="@+id/baby_icon" android:layout_height="wrap_content" android:src="@drawable/baby" android:clickable="true" android:layout_width="wrap_content"></ImageView>
        </LinearLayout>
    </LinearLayout>
    <fragment
        android:name="com.nicu.health.FragAFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/yellow_cardlist_fragment"
        android:layout_weight="1"
        >
    </fragment>
</LinearLayout>

При запуске это показывает правильный фрагмент (FragAFragment). Теперь нажмите кнопку для baby_icon. Я пытаюсь удалить текущий фрагмент и добавить новый (FragBFragment), который имеет совершенно другую структуру.

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

                        Fragment baby = FragBFragment.newInstance(1);
                    FragmentTransaction ft = getFragmentManager().beginTransaction();
//                  ft.remove(getFragmentManager().findFragmentById(R.id.yellow_cardlist_fragment));
//                  ft.add(R.id.yellow_cardlist_fragment, baby);
                    ft.replace(R.id.yellow_cardlist_fragment, baby);
                    ft.addToBackStack(null);
                    Log.i(TAG, "Code for commit = "+ft.commit());

Я перепробовал все комбинации удаления, замены и добавления, чтобы получить фрагмент, но безуспешно!

Также далее я попробовал с кодом как

<fragment
    android:name="com.nicu.health.FragBFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/yellow_cardlist_fragment"
    android:layout_weight="1"
    >

и это работает, чтобы показать второй фрагмент при запуске !!!!

Помощь будет действительно оценена.

Спасибо

Ответы [ 2 ]

7 голосов
/ 05 июня 2011

Ответ на мой вопрос:

Android: невозможно заменить один фрагмент другим

Я добавил динамические фрагменты при запуске основного действия и щелкнул по кнопке.ft.replace заменить старый фрагмент!

0 голосов
/ 09 февраля 2013

Хорошо, мое первое предположение: вы забыли сказать ft.commit ();

Мое второе предположение:

Допустим, у вас есть Activity AB, которая контролирует Фрагмент A и Фрагмент B.

У вас также есть 3 макета. Layout_ActivityAB, Layout_FragA, Layout_FragB.

Таким образом, setContentView (R.layout.Layout_ActivityAB) вызывается внутри Activity AB. Это будет макет, в котором вы говорите андроиду, где разместить фрагмент на экране.

Внутри фрагмента A или фрагмента B:

@Override
    //onCreateView is called when an instance of this class is first created.
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.Layout_FragA, container, false);  return rootView;
    }

R.layout.Layout_FragA вызывается внутри фрагмента. Layout_FragA - фактическое содержимое фрагмента.

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