Estoy usando el fragmento androidx, pero siempre obtengo una referencia nula de youTubeFragment y se debe a una conversión diferente. imagen
import androidx.fragment.app.Fragment val youtubeFragment = childFragmentManager.findFragmentById(R.id.playbackYoutubeFragment) as com.google.android.youtube.player.YouTubePlayerFragmentla importación de fragmentos de youtube es:
import android.app.Fragment;mi diseño:
<fragment android:id="@+id/playbackYoutubeFragment" android:layout_width="match_parent" android:layout_height="wrap_content" android:name="com.google.android.youtube.player. YouTubePlayerFragment" app:layout_constraintTop_toTopOf="parent"/>¿Hay alguna solución para solucionar ese problema? o tengo que cambiar mi tipo de fragmento. En realidad, no quiero cambiar mi tipo de fragmento de androidx. la ayuda siempre es apreciada.
Es porque su childFragmentManager es del paquete AndroidX , por lo tanto, el tipo de retorno de findFragmentById es androidx.Fragment . YouTubePlayerSupportFragment es android.support.v4.app.Fragment , por lo que en tiempo de compilación, estos son dos tipos separados que cannot be cast to each other .
El problema es que Youtube SDK no usa androidx . Puede solucionar esto enabling jetifier , agregue el siguiente código a su gradle.properties :
android.enableJetifier=true Esto solucionará el problema al migrar todas las clases de soporte en bibliotecas de terceros a androidx , por lo que su conversión tendrá éxito en el tiempo de ejecución. Sin embargo, la advertencia de Android Studio seguirá estando presente; puede suprimirla:
// CAST_NEVER_SUCCEEDS can be ignored - happens because Youtube SDK's fragment is not // androidx.Fragment, but Jetifier will take care of that and cast will succeed @Suppress("CAST_NEVER_SUCCEEDS")