我创建了一个使用youtube API的Android应用程序但是我遇到了问题。 当我用youtube视频加载片段时。加载另一个片段然后返回到应用程序崩溃的youtube视频片段。
播放视频的片段:
public static Fragment newInstance(Context context) {
WorkshopFragment f = new WorkshopFragment();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.workshop_fragment, null);
YouTubePlayerFragment youTubePlayerFragment = (YouTubePlayerFragment) getActivity().getFragmentManager().findFragmentById(R.id.youtube_fragment);
youTubePlayerFragment.initialize(API_KEY, this);
return root;
}
@Override
public void onInitializationFailure(Provider arg0,
YouTubeInitializationResult arg1) {
}
@Override
public void onInitializationSuccess(Provider provider, YouTubePlayer player,
boolean wasRestored) {
if (!wasRestored) {
player.cueVideo(VIDEO_ID);
}
}
}
布局:
<fragment
android:name="com.google.android.youtube.player.YouTubePlayerFragment"
android:layout_below="@+id/paragraph"
android:layout_marginTop="30dp"
android:id="@+id/youtube_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
修复了重复ID错误:
XML:
<FrameLayout
android:id="@+id/fragment_youtube"
android:layout_below="@+id/rule"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="30dp" />
然后我通过代码创建了youtube片段:
Fragment fragment = new YouTubePlayerFragment();
FragmentManager fm = getActivity().getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment_youtube, fragment);
ft.commit();
YouTubePlayerFragment youtubeFrag = (YouTubePlayerFragment) fragment;
youtubeFrag.initialize(API_KEY, this);
答案 0 :(得分:0)
由于片段是XML格式的,因此每次扩充XML时都会生成一个新片段。我认为片段的id在XML中没有变化,并且它试图创建具有相同id的新片段,因为已经运行了一个。两个正在运行的片段无法使用相同的ID,因此我认为该应用程序崩溃了。
尝试在开始新片段之前杀死旧片段或以编程方式而不是通过xml创建片段。