web-dev-qa-db-ja.com

Youtubeプレーヤーのサポートフラグメントが機能しなくなったAndroid studio 3.2(androidx)

Android Studioをバージョン3.2に更新し、androidxを使用するための指示に従いました。

私はFragmentアクティビティ内でYoutubeフラグメントを使用しており、すべてが完璧に機能しましたが、更新後、これらの3つの単純な行で「メソッド 'add(...)'を解決できません」というエラーが表示されます。

YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit();

...そして「追加」の代わりに「置換」を使用しようとすると、「第2引数のタイプが間違っています。見つかりました: 'com.google.Android.youtube.player.YouTubePlayerSupportFragment'、必須: 'androidx.fragment.app 。断片'"

...そのため、問題は新しいAndroidX機能に関係していると思います。

問題は、addメソッドがタイプの2番目のパラメーターを必要とすることです。

androidx.fragment.app.Fragment

...しかしYouTubePlayerSupportFragmentは以下を返します:

Android.support.v4.app.Fragment

誰もがこの問題を解決する方法を知っていますか? 「Android.support.v4.app.Fragment」を「androidx.fragment.app.Fragment」にキャストする方法はありますか?

15
Nicola Salvaro

transaction.replace。エラーは無視してください。うまくいきます。 Googleはまだyoutube APIライブラリをandroidxにリファクタリングしていません。

8
Bek

元のJavaファイル(com.google.Android.youtube.player.YouTubePlayerFragment)をプロジェクトに同じパッケージにコピーしますが、異なるクラス名などをコピーします。com.google.Android.youtube.player.YouTubePlayerFragmentX、およびAndroid.app.Fragmentからandroidx.fragment.app.Fragmentへ。

実装は同じです:

YouTubePlayerFragmentX youTubePlayerFragment = YouTubePlayerFragmentX.newInstance();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit();

テスト済み...動作しています。

3
Hosszuful

置換.add

transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit();

これで.replace

transaction.replace(R.id.youtube_fragment, youTubePlayerFragment).commit();

this クラスをプロジェクトフォルダにコピーします(以下のフォルダを作成する必要がある場合があります)

Java-> com-> google-> Android-> youtube-> player->(ここの名前)YouTubePlayerSupportFragmentX.Java

enter image description here

次にコードを置き換えます

YouTubePlayerSupportFragmentからYouTubePlayerSupportFragmentXに。

3
Attaullah

@Hosszfulの回答に従って修正しました。このファイルを使用するだけで簡単にできます https://Gist.github.com/medyo/f226b967213c3b8ec6f6bebb5338a492

3
Mehdi

私はコードチャンクに従ってそれを動作させました。

Object obj = 
getSupportFragmentManager().findFragmentById(R.id.youtube_player_fragment);
    if (obj instanceof YouTubePlayerSupportFragment)
        youTubePlayerFragment = (YouTubePlayerSupportFragment) obj;

デバッグ中に、fragmentmanagerがYouTubePlayerSupportFragmentのみのインスタンスになることがわかりました。しかし、コンパイラは私が書くときにそれをキャストすることができませんでした

(YouTubePlayerSupportFragment) 
getSupportFragmentManager().findFragmentById(R.id.youtube_player_fragment);

上記のコードチャンク(instanceof)は正常に機能しました。

0
Mrityunjaya