Диалоговое окно Оптимизация кода - PullRequest
1 голос
/ 18 января 2012

Я работаю над оптимизацией своего кода в приложении, которое делаю.Я не продвинутый в любом случае, поэтому я мог бы серьезно использовать некоторую помощь.

Я создаю диалоговые окна предупреждений, и я привык использовать это как макет

private void doScript2() {
    AlertDialog.Builder alert_box=new AlertDialog.Builder(this);
    alert_box.setIcon(R.drawable.caution);
    alert_box.setTitle("Caution");
    alert_box.setMessage("Mount external sd as NTFS at boot?");
    alert_box.setPositiveButton("Yes",new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(getApplicationContext(), "External SD will be mounted",Toast.LENGTH_SHORT).show();
            try {
                ....
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (RootToolsException e) {
                e.printStackTrace();
            }
        }
    });
    alert_box.setNegativeButton("No", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
        }
    });
    alert_box.show();
}

После прочтенияПримеры Google, которые мне удалось создать.

private static final int DIALOG_TWRESTORE = 202;
private static final int DIALOG_TWRESTART = 204;
private static final int DIALOG_TWONESIX = 205;
private static final int DIALOG_TWONENINE = 206;
private static final int DIALOG_TWTWOFOUR = 207;

protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DIALOG_TWRESTORE:
        return createDialog("Restore", "Are you sure you want to restore your TW?");
    case DIALOG_TWRESTART:
        return createDialog("Restart", "Restart TW?");
    case DIALOG_TWONESIX:
        return createDialog("Resize to 6x6", "Are you blablabla of TW?");
    case DIALOG_TWONENINE:
        return createDialog("Resize to 5x5", "Are you on blablabla of TW?");
    case DIALOG_TWTWOFOUR:
        return createDialog("Resize to 4x5", "Are you on blablabla of TW?");
    default:
        return super.onCreateDialog(id);
    }
}

private Dialog createDialog(String title, String message) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(title)
    .setIcon(R.drawable.question)
    .setMessage(message)
    .setCancelable(false)
    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            //I want to pass on a parameter from the above class to use within the dialog
            **parametergoeshere*();             
        }
    })
    .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
        } });
    return builder.create();
}

Мой главный вопрос заключается в том, что я делаю диалоговое окно Да / Нет, которое я хочу сделать по-другому, нажав кнопку Да.Я хочу передать это аналогично параметру, чтобы я не повторял код, который использовал раньше.Есть ли способ сделать это?Заранее большое спасибо.

РЕДАКТИРОВАТЬ:

Я пробовал следующий код, который не работает.

protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DIALOG_TWRESTORE:
        return createDialog("Restore", "Are you sure you want to restore your TW?", Commands.doTWBackup());
    default:
        return super.onCreateDialog(id);
    }
}

private Dialog createDialog(String title, String message, Object param) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(title)
    .setIcon(R.drawable.question)
    .setMessage(message)
    .setCancelable(false)
    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            //I want to pass on a parameter from the above class to use within the dialog
            param;              
        }
    })
    .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
        } });
    return builder.create();
}

Я получаю следующие ошибки:

Syntax error, insert "AssignmentOperator Expression" to complete Expression

The method createDialog(String, String, Object) in the type Launcher is not applicable for the arguments (String, String, void)

Ответы [ 2 ]

0 голосов
/ 29 января 2012

Лучший способ, которым я закончил, это следующее:

protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DIALOG_RIGHTTOLEFT:
        return new AlertDialog.Builder(this).setTitle("Caution").setIcon(android.R.drawable.ic_dialog_alert)
                .setMessage("Do you need to apply Right to Left Patch? This is NOT Revertable!")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        RootCommands.doRightToLeft();
                        Toast.makeText(getApplicationContext(), "RTL Patch Applied. Please Reboot.",Toast.LENGTH_SHORT).show();
                    }}).setNegativeButton(android.R.string.no, null).create();
    case DIALOG_MOUNTNTFS:
        return new AlertDialog.Builder(this).setTitle("Caution").setIcon(android.R.drawable.ic_dialog_alert)
                .setMessage("This will mount your external SDCard as NTFS and Break apps2sd. Continue?")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        RootCommands.doMountNTFS();
                        Toast.makeText(getApplicationContext(), "External SD Mounted as NTFS",Toast.LENGTH_SHORT).show();
                    }}).setNegativeButton(android.R.string.no, null).create();
    case DIALOG_MOUNTONBOOT:
        return new AlertDialog.Builder(this).setTitle("Caution").setIcon(android.R.drawable.ic_dialog_alert)
                .setMessage("Mount external sd as NTFS at boot? This might cause issues.")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        RootCommands.doMountOnBoot();
                        Toast.makeText(getApplicationContext(), "Reboot to take effect.",Toast.LENGTH_SHORT).show();
                    }}).setNegativeButton(android.R.string.no, null).create();
    default:
        return super.onCreateDialog(id);
    }

Вопрос все еще применяется; если кто-нибудь найдет лучшее решение для этого, пожалуйста, поделитесь.

0 голосов
/ 18 января 2012

Вам потребуется определить объект DialogInterface.OnClickListener для кнопки «Да» в функции onCreateDialog, а затем передать его в функцию createDialog в качестве параметра, где вы будете использовать его для создания нового диалога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...