1

我试图将YouTubePlayerFragment嵌入到DialogFragment中。我能够一次启动对话框并显示YouTubePlayer,但第二次它总是崩溃(不管我做什么)。我认为这是一个生命周期问题,我根本不明白。 我正在使用AndroidAnnotations,问题是DialogFragment的视图始终在由AndroidAnnotations生成的onCreateView方法中创建。YouTubePlayerFragment生命周期中的对话框片段

有没有人知道在这种情况下如何处理DialogFragment的生命周期?

这是AndroidAnnotations生成的代码:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    contentView_ = super.onCreateView(inflater, container, savedInstanceState); 
    if (contentView_ == null) { 
     contentView_ = inflater.inflate(layout.video_fragment, container, false); 
    } 
    return contentView_; 
} 

这是我到目前为止有:

public class VideoFragmentDialog extends DialogFragment implements YouTubePlayer.OnInitializedListener { 

    private static final String DEVELOPER_KEY = "secret"; 
    private String videoUrl; 

    @FragmentById(R.id.youTubePlayerFragment) 
    YouTubePlayerFragment youTubePlayerFragment; 

    @AfterViews 
    void initializeYouTubePlayer() { 
     youTubePlayerFragment.setRetainInstance(true); 
     youTubePlayerFragment.initialize(DEVELOPER_KEY, this); 
    } 

    @Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored) { 
     if (!wasRestored) { 
      youTubePlayer.cueVideo(videoUrl); 
     } 
    } 

    @Override 
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { 
     //To change body of implemented methods use File | Settings | File Templates. 
    } 

    public String getVideoUrl() { 
     return videoUrl; 
    } 

    public void setVideoUrl(String videoUrl) { 
     this.videoUrl = videoUrl; 
    } 
} 

这是堆栈跟踪:

Caused by: java.lang.IllegalArgumentException: Binary XML file line #10: Duplicate id 0x7f0a0281, tag null, or parent id 0x7f0a0280 with another fragment for com.google.android.youtube.player.YouTubePlayerFragment 
    at android.app.Activity.onCreateView(Activity.java:4248) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673) 

回答

0

我想这是因为您正在片段中使用片段(嵌套片段)而不使用getChildFragment() 在这里找一个示例如何做到这一点:nested fragments

+0

我不认为这是问题,因为我已经在另一个片段内使用了ViewPagerFragment的嵌套片段。 –