使用注入的 Fragment 打开 View 时出现 InflateException
InflateException when opening View with injected Fragment
我的应用程序有一种用于 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
?
由于您使用的是 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 在第二次打开时一直让我的 activity 崩溃 - 还显示 "InflateException" 错误消息。
就我而言,YouTubePlayerFragment 位于另一个片段内。
最初,我曾经在 XML 文件中对其进行贴标。
我没有在 XML 文件中声明 YouTubePlayerFragment,而是在我的 Java 代码中对其进行实例化和扩充。这解决了问题。
我的应用程序有一种用于 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
?
由于您使用的是 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 在第二次打开时一直让我的 activity 崩溃 - 还显示 "InflateException" 错误消息。 就我而言,YouTubePlayerFragment 位于另一个片段内。 最初,我曾经在 XML 文件中对其进行贴标。
我没有在 XML 文件中声明 YouTubePlayerFragment,而是在我的 Java 代码中对其进行实例化和扩充。这解决了问题。