1

appl を Android 2.2 (API 8) から Android 2.1 (API7) にダウングレードしようとすると、ダイアログ ボックスでいくつかの問題に直面しています。このスレッドに基づいて、これらの例外をキャッチしようとしていますが、showDialog メソッドをオーバーライドできません。

this answer to a similar issueに従って Java コンパイラを 1.5 から 1.6 に変更しましたが、変更はありません。Eclipse は引き続き :

アクティビティからの最終メソッドをオーバーライドできません

public class MyActivity extends Activity implements
        SeekBar.OnSeekBarChangeListener {


// ... some stuffs

    @Override // here is the issue
    public void showDialog(int dialogId) {
        try {
            super.showDialog(dialogId);
        } catch (IllegalArgumentException e) {
            Log.e(ACTIVITY_TAG, "Error dialog");
        }
    }
    @Override
    protected Dialog onCreateDialog(int id) {

        switch (id) {
        case DIALOG_ALERT:
            // Create out AlertDialog
            Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(msg);
            builder.setCancelable(false);
            builder.setPositiveButton(GOTO_BOOK, new OkOnClickListener());
            builder.setNegativeButton(STAY_HERE, new CancelOnClickListener());
            AlertDialog dialog = builder.create();
            dialog.show();
            break;
        case DIALOG_ONCREATE:
            // Create out AlertDialog during the "onCreate" method (only "Ok"
            // button)
            Builder builder2 = new AlertDialog.Builder(getParent());
            builder2.setMessage(msg);
            builder2.setCancelable(false);
            builder2.setPositiveButton(GO_BACK, new OkOnClickListener());

            AlertDialog dialog2 = builder2.create();
            dialog2.show();
            break;
        }

        return super.onCreateDialog(id);

    }

    // ... some stuffs

    }
4

2 に答える 2

1

これはアクティビティの最終的な方法であるため、これをオーバーライドすることはできません。ダイアログを表示したい場合は、メソッドを呼び出すだけです。

showDialog(ID);
于 2012-08-29T09:13:27.893 に答える
1

onCreateDialog はダイアログを表示すべきではありません。表示部分はフレームワークによって行われます。正しいダイアログを返すだけです。

オーバーライド部分を取り外します。この問題の回避策は必要ありません。コードに問題があります

削除する

dialog.show();

また、これの代わりに

return super.onCreateDialog(id);

使用する

return dialog;
于 2012-08-29T09:15:44.827 に答える