findFragmentById возвращает null для фрагмента после миграции на AndroidX

После перехода на AndroidX findFragmentById (также findFragmentByTag) начал возвращать значение null, когда я пытался получить фрагмент.

Фрагмент добавляется в XML следующим образом:

    <fragment
        android:id="@+id/id_fragment"
        android:tag="tag_fragment"
        android:name="com.blaa.MyFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

Фрагмент выглядит так:

class MyFragment : androidx.fragment.app.Fragment() {
...
}

и активность выглядит так:

class MyActivity : AppCompatActivity(){
...
}

зависимости:

...
implementation "androidx.appcompat:appcompat:1.0.2"
implementation "androidx.legacy:legacy-support-v4:1.0.0"
implementation "com.google.android.material:material:1.1.0-alpha03"
...

и вот как я это называю внутри кода:

supportFragmentManager.findFragmentById(R.id.id_fragment)

or

supportFragmentManager.findFragmentByTag(R.id.tag_fragment)

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

Спасибо за любой совет


person Palejandro    schedule 05.02.2019    source источник
comment
Вы обновили свои gradle.properties?   -  person Ricardo    schedule 05.02.2019
comment
Завершая комментарий @Ricardo, добавили ли вы android.useAndroidX=true и android.enableJetifier=true к своему gradle.properties?   -  person Wang    schedule 05.02.2019
comment
@Ванг, ты читал вопрос? у джетификатора совсем другая цель.   -  person Martin Zeitler    schedule 05.02.2019
comment
@MartinZeitler да, конечно, что заставляет вас сомневаться в моем комментарии? Я не думаю, что это не имеет отношения к вопросу.   -  person Wang    schedule 05.02.2019
comment
@Wang Я думаю, что оба комментария пропускают реальный вопрос, потому что атрибут name явно ссылается на экземпляр androidx.fragment.app.Fragment... а androidx не что иное, как переупакованная библиотека поддержки. пространство имен - единственное отличие, в то время как jetifier преобразует пространство имен сторонних библиотек.   -  person Martin Zeitler    schedule 05.02.2019


Ответы (1)


Доступ к индексу, как fm.getFragments().get(0) или fm.getFragments().get(1), может работать.

а если нет ... он может не найти его, потому что он еще не был добавлен (проблема времени).

fm.getFragments() по крайней мере полезно, чтобы увидеть, что вообще доступно в текущий момент времени.

person Martin Zeitler    schedule 05.02.2019
comment
Я забыл упомянуть, что этот фрагмент вложен в другой фрагмент, который находится внутри активности. getFragments вернул только этот один фрагмент верхнего уровня, а childFragmentManager, наконец, показал мои фрагменты. Похоже, что supportFragmentManager теперь показывает только прямые дочерние элементы. Ваш ответ привел меня к решению, так что спасибо :) - person Palejandro; 06.02.2019