0

カスタム ダイアログ内に VideoView があります。ダイアログが初めて表示されたとき、ビデオは正しく再生されますが、ダイアログを閉じてから再度ロードすると、ビデオは再生されず、ダイアログは単なる黒い画面になります。

Dialog を作成するために使用するコードは次のとおりです。

Dialog d;

protected Dialog onCreateDialog(int id) {
    switch(id) {
    case DIALOG_VIDEO:
        AlertDialog.Builder builder;

        LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.video,null);

        final VideoView vv = (VideoView)layout.findViewById(R.id.vv);
        vv.setMediaController(new MediaController(this));

        vv.setVideoURI(path);

        vv.setZOrderOnTop(true);
        vv.requestFocus();
        vv.start();

        builder = new AlertDialog.Builder(this);
        builder.setView(layout);
        d = builder.create();
        d.setOnDismissListener(new DialogInterface.OnDismissListener() {
            public void onDismiss(DialogInterface dialog) {
                VideoView vv = (VideoView)d.findViewById(R.id.vv);

                vv.stopPlayback();
                vv.clearFocus();
            }
        });
        break;
    default:
        d = null;
    }

    return d;
}

私は何を間違っていますか?

お時間をいただきありがとうございます。下手な英語で申し訳ありません。

4

1 に答える 1

0

メソッドonCreateDialog(int id)は、ダイアログの作成時に1回だけ呼び出されます。したがって、ダイアログが作成されてダイアログを閉じると、メソッドonCreateDialog(int id)が呼び出され、再度呼び出されることはありません。そのため、ビデオを2回目に表示することはできません。コードによると、ビデオを再生するためのロジックは、ダイアログを作成するためだけのものです。

ダイアログを起動するたびに呼び出されるonPrepareDialog(int id)を使用できます。

注:: onCreateDialog(int id)とonPrepareDialog(int id)の両方を使用する必要があります。

于 2012-06-25T12:17:13.197 に答える