0

我有一个父活动 A,它有两个子活动 B 和 C。当我打开父活动 A 时,它决定必须打开哪个子活动。(函数使用startActivityForResult) 例如。A决定打开B。B播放视频并将结果返回到后面。如果A决定再次打开B,那很好。B 不能正常打开(不播放视频)。

注意: 以下很好:

A-->B 和 A<--B

然后

A-->C 和 A<--C

然后

A-->B 和 A<--B

但以下不起作用:

A-->B 和 A<--B

然后

A-->B and A<--B //当尝试在 B 上再次移动时。我认为 A 在完成之前再次调用 B

然后

A-->C 和 A<--C

任何想法来解决这个问题?

意思是我怎样才能在再次打电话给那个孩子之前完成那个孩子的活动?

以下是父活动的代码:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d(Constants.TAG,"requestCode: "+requestCode+" : resultCode : "+ resultCode);
        finishActivity(requestCode);
        playProgram(requestCode);
    }

    private void playProgram(int requestCode){
        if(requestCode == QUESTION_WRAPPER){
            currentChap = currentChap + 1;
            Intent intent = new Intent(MovieWrapperActivity.this, VideoWrapperActivity.class);
            intent.putExtra("chaptertoplay", currentChap);
            intent.putExtra("videofile",  Constants.mCourse.getmChapters().get(currentChap).getVideoURL());
            startActivityForResult(intent, MOVIE_WRAPPER);
        }else if(requestCode == MOVIE_WRAPPER) {
            if(Constants.mCourse.getmChapters().get(currentChap).isQuiz()){
                Intent in2 = new Intent(MovieWrapperActivity.this, QuestionWrapper.class);
                in2.putExtra("chaptertoplay", currentChap);
                startActivityForResult(in2, QUESTION_WRAPPER);

            }else{
                currentChap = currentChap + 1;
                Intent intent = new Intent(MovieWrapperActivity.this, VideoWrapperActivity.class);
                intent.putExtra("chaptertoplay", currentChap);
                intent.putExtra("videofile",  Constants.mCourse.getmChapters().get(currentChap).getVideoURL());
                startActivityForResult(intent, MOVIE_WRAPPER);
            }
        }
    }

B代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (!io.vov.vitamio.LibsChecker.checkVitamioLibs(this))
        return;
    setContentView(R.layout.videoview);
    init();
    mVideoView = (VideoView) findViewById(R.id.surface_view);
    mVideoView.setVideoPath(videoPath);
    mVideoView.setVideoQuality(MediaPlayer.VIDEOQUALITY_HIGH);
    mController = new MediaController(this);
    mVideoView.setMediaController(mController);
    mVideoView.setOnCompletionListener(new OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer arg0) {
            Log.d(Constants.TAG,"Completed");
            Intent returnIntent = new Intent();
            setResult(RESULT_OK, returnIntent);
            mVideoView = null;
            mController = null;
            finish();
        }
    });
}

我认为 B 中的媒体元素需要时间来破坏甚至不被破坏。

4

2 回答 2

0
Intent output = new Intent();
    output.putExtra("DATA", data);
    setResult(Activity.RESULT_OK  , output);
    finish();

finish()设置结果后调用。

于 2013-04-18T12:57:40.070 回答
0

您必须在子活动中的 setresult() 之后调用 finish()。

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d(Constants.TAG,"requestCode: "+requestCode+" : resultCode : "+ resultCode);
        finishActivity(requestCode);//dont finish child activity here.
        playProgram(requestCode);
    }
于 2013-04-18T12:59:09.790 回答