InflateException при открытии просмотра с внедренным фрагментом

В моем приложении есть своего рода музыкальный автомат для Youtube видео. Я использую YouTubePlayerFragment и мой макет выглядит так:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

    <ListView
        android:id="@+id/lv_songs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <fragment
        android:id="@+id/youtube_fragment"
        android:name="com.google.android.youtube.player.YouTubePlayerFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

Это мой код:

void init() {
     youtubePlayer = (YouTubePlayerFragment) getActivity().getFragmentManager().findFragmentById(R.id.youtube_fragment);
     youtubePlayer.initialize(AppUtils.API_KEY, this);
}

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer ytplayer,

        boolean wasRestored) {
           player = ytplayer;
        }

        @Override
        public void onInitializationFailure(final YouTubePlayer.Provider provider, final YouTubeInitializationResult youTubeInitializationResult) {
        }

        @Override
        public void onResume() {
            super.onResume();
            ((HomeActivity_) getActivity()).getSupportActionBar().setTitle(getString(R.string.jukebox));
        }
}

Когда я открываю этот вид в первый раз, нет проблем. Я могу выбрать видео из моего ListView и играть в нее. Но когда я возвращаюсь к этому мнению снова, я получаю InflateException:

Caused by: java.lang.IllegalArgumentException: Binary XML file line #12: Duplicate id 0x7f09004a, tag null, or parent id 0xffffffff with another fragment for com.google.android.youtube.player.YouTubePlayerFragment

Итак, я думаю, что YouTubePlayerFragment не перерабатывается onPause моего фрагмента. Даже когда я звоню

getActivity().getSupportFragmentManager().beginTransaction().remove(getActivity().getSupportFragmentManager().findFragmentById(R.id.youtube_fragment)).commit();

в onPauseесть еще та же ошибка. Как я могу избежать этого Fragment чтобы надуться во второй раз, или удалить раздутый Fragment каждый раз, когда я покидаю эту точку зрения?

2 ответа

Решение

Поскольку вы используете SupportFragmentManager, вы также должны использовать вспомогательный фрагмент YouTube:

<fragment
    android:id="@+id/youtube_fragment"
    android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

У меня была такая же проблема. По какой-то причине YouTubePlayerFragment продолжал сбивать мою активность при открытии его во второй раз - также с сообщением об ошибке "InflateException". В моем случае YouTubePlayerFragment находится внутри другого фрагмента. Первоначально я использовал его для удаления из файла XML.

Вместо того, чтобы объявлять YouTubePlayerFragment внутри XML-файла, я переключился на его создание и раздувание в своем Java-коде. Это решило проблему.

Другие вопросы по тегам