Я хочу сделать что-то подобное. Картина проще, чем слова: Фрагмент Android для планшетов и телефонов
И когда пользователь нажимает на кнопку на фрагменте B, фрагмент B изменен, но не А. я сделал два различных макета (портрет и земли один). Первые из них имеет компоновку, как
<?xml version="1.0" encoding="utf-8"?>
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.my.app.ContactsFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/contacts_fragment" />
Я кнопка в моем макете фрагмента с простой активностью вызовом:
Intent intent = new Intent(getActivity(), NextActivity.class);
startActivity(intent);
и земля одна таковы:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.my.app.ContactsFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/contacts_fragment" />
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.my.app.HomeFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment_container" />
</LinearLayout>
Я изменяю внутренний фрагмент, используя следующий код:
FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
NextFragment nextFrag = new NextFragment();
ft.replace(R.id.fragment_container, nextFrag);
ft.addToBackStack(null);
ft.commit();
Эта часть работает хорошо.
У меня есть два вопроса в настоящее время:
Как поставить эти два пути изменения содержания в основной деятельности? Я имею в виду, что в основной деятельности фрагмент должен вызывать второй способ, но в обычной деятельности мне нужно вызвать первое.
Если я нажимаю на элемент в фрагменте A, а затем нажимаю кнопку в фрагменте B, которая изменяет фрагмент на NextFragment. Если я нажму на другой элемент, и я сделаю то же самое. Я могу вернуться к первому пользователю. Есть ли способ сбросить стек при нажатии на новый элемент?
Благодарим за помощь.
Пс: Я использую собственный фрагмент lib, а не поддержку v4.
Спасибо, я заменил макет некоторым FrameLayout. – Manitoba
Лучший способ задать свой вопрос: как определить, вызван ли фрагмент в «двойном режиме» или простой? – Manitoba
В зависимости от контейнеров 'FrameLayout' он попадает в макет, который он предоставляет. Если у него есть 'fragment_container_a', он добавляет к нему' FragmentA', если он получает 'fragment_container_b', он добавляет к нему' FragmentB'. Как в примере Google, 'if (findViewById (R.id.fragment_container_a)! = Null)'. Затем вы просто создаете портретный макет с помощью 'fragment_container_a' и помещаете его в папку' layout', а также ландшафтный макет с 'fragment_container_a' и' fragment_container_b' и помещаете его в папку 'layout-land'. Теперь в зависимости от макета, который получает 'Activity', он добавляет правый' Фрагмент'. –