2015-01-11 3 views
0

Мое приложение имеет своего рода музыкальный автомат для видео 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 каждый раз, когда я покидаю это представление?

ответ

1

Поскольку вы используете 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"/> 
+0

Когда я меняю его на com.google.android.youtube.player.YouTubePlayerSupportFragment, я получаю NPE при попытке открыть представление в первый раз ... – JensJensen

+0

@JensJensen неясно, что вы используете. В 1 месте вы вызываете 'getFragmentManager' в другом' getSupportFragmentManager'. Придерживайтесь одного из них на основе вашего 'minSdk'. – Simas

+0

Я изменил все на «SupportFragmentManager». Но, как я уже сказал, я получаю NPW при попытке вызвать youtubePlayer.initialize(). Но я определенно называю youtubePlayer = (YouTubePlayerSupportFragment) getActivity(). GetSupportFragmentManager(). FindFragmentById (R.id.youtube_fragment); до. – JensJensen

1

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

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

Смежные вопросы