0

親アクティビティ A には、2 つの子アクティビティ 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 と 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 の Media Elements は、破壊に時間がかかっているか、破壊されていないと思います。

4

2 に答える 2

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 に答える