Android: выход из приложения из пользовательского диалогового окна

Я создал настраиваемый диалог для основного действия с двумя кнопками, Exit и Continue:

public class AgeConfirmationDialog extends Dialog {

    public AgeConfirmationDialog(Activity a) {
        super(a);    
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setCancelable(false);
        setContentView(R.layout.age_dialog);
        // .....
        // Find the View objects; checkboxes and buttons logic; SharedPreferences
        // .....
    }
    // .....
}

Вот как диалог запускается из MainActivity:

AgeConfirmationDialog d = new AgeConfirmationDialog(this);
d.show();

Это настраиваемое диалоговое окно появляется каждый раз при запуске основного действия и запрашивает подтверждение возраста. Я не хочу, чтобы пользователи закрывали этот диалог с помощью кнопки «Назад», поэтому я добавил setCancelable(false) в метод onCreate. Кнопка Continue неактивна, пока не установлен флажок. Если нажата кнопка Continue, диалог закрывается с помощью setOnClickListener.

Проблема в том, что я не знаю, как закрыть это пользовательское диалоговое окно И завершить основное действие при нажатии кнопки Exit.

Можно ли это сделать из класса AgeConfirmationDialog, установив View.OnClickListener на кнопку Exit?


person Eduard    schedule 11.02.2014    source источник


Ответы (3)


измените код на что-то вроде этого:

public class AgeConfirmationDialog extends Dialog {
    Activity mainActivity;

    public AgeConfirmationDialog(Activity a) {
        super(a);    
        this.mainActivity = a;
    }

    //in onClick method of finish-button
    public void onFinishClick(View v) {
        mainActivity.finish(); //finish activity
    }
}
person Manuel Allenspach    schedule 11.02.2014
comment
Именно то, что я искал! Спасибо! - person Eduard; 11.02.2014

Я не знаю, как закрыть этот настраиваемый диалог и завершить основное действие при нажатии кнопки «Выход».

Затем вам просто нужно добавить ExitButton Click Listener:

finish();

Например:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setPositiveButton("Exit", new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                finish();
            }
        }).create().show();
person Sagar Shah    schedule 11.02.2014
comment
И как именно я мог это сделать, учитывая, что у меня есть класс AgeConfirmationDialog, расширяющий Dialog? - person Eduard; 11.02.2014
comment
Вовсе нет, вам просто нужно поставить мой код и сделать так же, как я. Здесь вы также можете увидеть, как я реализовал макет xml в диалоговом окне предупреждений. stackoverflow.com/questions/ 21499100/ - person Sagar Shah; 11.02.2014

Сделайте что-нибудь в своем onclicklistener кнопки выхода. Нравиться:

            Intent intent = new Intent(getApplicationContext(), MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.putExtra("EXIT", true);
            startActivity(intent);  

И ваша MainActivity делает что-то вроде:

        if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
        }

Что вы в основном делаете здесь, так это переходите к основной активности, которая является вашей начальной активностью с дополнительным ключом/значением, и проверяете ее в своей основной активности через getintent.

Это лучший процесс для выхода из приложения, или вы также можете использовать его для выхода из системы.

person Ranjit    schedule 11.02.2014
comment
Спасибо! Но разве это не медленнее, чем версия Ману? - person Eduard; 11.02.2014
comment
Он перезапускает вашу деятельность... Так что это немного медленнее - person Manuel Allenspach; 11.02.2014