Android: добавление фрагментов путем поиска контейнера с тегом вместо идентификатора - PullRequest
0 голосов
/ 25 апреля 2018

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

В моем основном фрагменте:

for (....) {
    ParentFragment parentFragment = new ParentFragment();
    parentFragment.setSomeData(data);
    fragmentTransaction.add(R.id.main_fragment_container, parentFragment, data);
}

fragmentTransaction.commit();

Теперь у меня есть N родительских фрагментов.

Внутри каждого ParentFragment:

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    ChildFragment childFragment = new ChildFragment();
    childFragment.setSomeData(data);
    fragmentTransaction.add(R.id.parent_fragment_container, childFragment).commit();
}

Проблема в том, что все экземпляры ChildFragment добавляются в первый ParentFragment, потому что "R.id.parent_fragment_container" является константой для всех ParentFragment. Он не меняется для каждого экземпляра ParentFragment.

Поскольку у меня есть уникальный тег для каждого экземпляра ParentFragment, могу ли я искать контейнер, используя этот тег вместо R.id.parent_fragment_container?

Определения XML:

fragment_main.xml:

<LinearLayout
    android:id="@+id/main_fragment_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

</LinearLayout>

fragment_parent.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parent_fragment_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

</LinearLayout>

1 Ответ

0 голосов
/ 25 апреля 2018

Fragment внутри другого Fragment должны обрабатываться с этим родителем Fragment s FragmentManager - полученным с getChildFragmentManager() - вместо Activity s FragmentManager.

Дочерний FragmentManager будет искать только данный родительский Fragment View для данного идентификатора контейнера, так что вы не получите все дочерние Fragment s в первом найденном контейнере, так как происходило, когда Activity FragmentManager просто использовал первый parent_fragment_container, который он нашел бы в общей иерархии Activity.

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