2015-01-11 69 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(); 

in ,仍然存在相同的錯誤。我應該如何避免Fragment再次膨脹或者每次離開此視圖時刪除膨脹的Fragment

回答

1

由於您使用的,你也應該使用支持的YouTube片段SupportFragmentManager:

<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您不清楚您使用的是什麼。在另一個'getSupportFragmentManager'中調用'getFragmentManager'。根據你的'minSdk'堅持其中之一。 – Simas

+0

我將所有內容都更改爲'SupportFragmentManager'。但正如我所說的,當試圖調用youtubePlayer.initialize()時,我會得到一個NPW。但我絕對稱爲youtubePlayer =(YouTubePlayerSupportFragment)getActivity()。getSupportFragmentManager()。findFragmentById(R.id.youtube_fragment);之前。 – JensJensen

1

我有同樣的問題。出於某種原因,YouTubePlayerFragment在第二次打開我的活動時不斷崩潰 - 也出現「InflateException」錯誤消息。 就我而言,YouTubePlayerFragment位於另一個片段內。 最初,我用它在XML文件中進行了decalre。

我不是在XML文件中聲明YouTubePlayerFragment,而是在我的Java代碼中實例化並膨脹它。這解決了這個問題。

相關問題