Android ChildFragmentManager(). FindFragmentById() всегда нулевой
Я наткнулся на сумасшедшего маленького "жучка", или я просто делаю что-то не так. Я пытаюсь получить ссылку на фрагмент, который находится внутри фрагмента. Итак, мы имеем ParentFragment
это дитя MainActivity
, Я могу получить ссылку на этот ParentFragment без проблем, потому что ParentFragment
добавляется в MainActivity
через код:
ParentFragment fragment = new ParentFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragmentPlaceholder, fragment);
transaction.commit();
Я добавил ChildFragment
к ParentFragment
через XML вот так:
parent_fragment.xml
<RelativeLayout ... etc>
.. some other views, findViewById('') works great on these.
<fragment
android:layout_width="70dp"
android:layout_height="70dp"
android:id="@+id/childFragment1"
android:tag="1"
class="com.my.package.ChildFragment"
android:name="com.my.package.ChildFragment"
tools:layout="@layout/child_fragment" />
</RelativeLayout>
Все работает нормально, ChildFragment(ы) отображаются в ParentFragment. Единственное, что есть; Я не могу найти фрагмент ById.
Я пробовал несколько способов достижения этого, как это должно быть сделано (?):
getChildFragmentManager().findFragmentById(R.id.childFragment1)
Не сработало Кроме того, получение Activity и использование этого менеджера фрагментов не работает (.. конечно).
Я также попытался получить все фрагменты в ChildFragmentManager, перебрать их и т. Д. Но это всегда возвращает нуль:
getChildFragmentManager().getFragments()
Есть ли у вас идеи, почему это происходит? Могу ли я использовать ChildFragrentManager, если фрагменты не добавляются с помощью кода?
Спасибо!
2 ответа
Если вы хотите использовать вложенные фрагменты и иметь возможность получить ссылку на них через findFragmentById, вы не можете использовать пакет поддержки.
Я изменил все getSupportFragmentManager()
к getFragmentManager()
и заменил все FragmentActivity
с регулярными Activity
"S.
Теперь все работает как положено, просто позвоните getChildFragmentManager().findFragmentById()
,
Вы должны добавить свой дочерний фрагмент динамически. Смотрите здесь:
Примечание. Вы не можете раздувать макет на фрагмент, если этот макет содержит <фрагмент>. Вложенные фрагменты поддерживаются только при динамическом добавлении к фрагменту.
пс. если вы планируете использовать вложенные фрагменты, то будьте готовы к различным странным поведениям, вы можете найти их в отчетах об ошибках на платформе Android: