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-коде. Это решило проблему.