使用注入的片段打开View时出现InflateException

时间:2015-01-11 23:14:39

标签: android android-fragments inflate-exception

我的应用有一种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 个答案:

答案 0 :(得分: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"/>

答案 1 :(得分:1)

我有同样的问题。出于某种原因,YouTubePlayerFragment在第二次打开时仍然使我的活动崩溃 - 同时使用&#34; InflateException&#34;错误信息。 就我而言,YouTubePlayerFragment位于另一个片段中。 最初,我曾经在XML文件中对其进行了十分转换。

我没有在XML文件中声明YouTubePlayerFragment,而是切换到在我的Java代码中实例化和膨胀它。这解决了这个问题。