Мое приложение имеет своего рода музыкальный автомат для видео Youtube. Я использую YouTubePlayerFragment
и мой макет выглядит следующим образом:InflateException при открытии Просмотр с введенным фрагментом
<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
не переработаны моего фрагмента. Даже когда я называю
getActivity().getSupportFragmentManager().beginTransaction().remove(getActivity().getSupportFragmentManager().findFragmentById(R.id.youtube_fragment)).commit();
в , есть все та же ошибка. Как я могу избежать этого Fragment
, чтобы получить завышенную во второй раз или удалить завышенный Fragment
каждый раз, когда я покидаю это представление?
Когда я меняю его на com.google.android.youtube.player.YouTubePlayerSupportFragment, я получаю NPE при попытке открыть представление в первый раз ... – JensJensen
@JensJensen неясно, что вы используете. В 1 месте вы вызываете 'getFragmentManager' в другом' getSupportFragmentManager'. Придерживайтесь одного из них на основе вашего 'minSdk'. – Simas
Я изменил все на «SupportFragmentManager». Но, как я уже сказал, я получаю NPW при попытке вызвать youtubePlayer.initialize(). Но я определенно называю youtubePlayer = (YouTubePlayerSupportFragment) getActivity(). GetSupportFragmentManager(). FindFragmentById (R.id.youtube_fragment); до. – JensJensen