Окно закрытия приложения

169
01 марта 2019, 03:30

Подскажите пожалуйста, как правильно будет реализовать.
У меня имеется окно закрытия приложения (при нажатии на кнопку назад из главного экрана появляется диалоговое окно с двумя кнопками: выйти и закрыть окно). Такую мини-систему мне нужно использовать в двух разных классах.
Придется дважды создавать этот код в двух классах, либо есть какие-то другие методы сделать код более гибким?

Answer 1

Ты можешь создать родительский класс, написать код диалога в нём.

В двух разных классах ты наследуешься от этого родительского класса и вызываешь в них метод родительского класса, который отображает диалог.

Чтоб диалог был с разным содержимым, просто принимай на вход метода нужные данные и подставляй внутри метода в родительском классе. Метод не должен быть private.

Например, родитель с методом для диалога:

import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
public class BaseActivity extends AppCompatActivity {
    public void showAlert(Context context){
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("Заголовок")
                .setMessage("Содержимое")
                .setCancelable(false)
                .setNegativeButton("Отмена",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                //при необходимости какой-то код на отмену...
                                //...
                                dialog.dismiss();
                            }
                        })
                .setPositiveButton("Ок",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                //при необходимости какой-то код на принятие...
                                //...
                                dialog.dismiss();
                            }
                        });

        AlertDialog alert = builder.create();
        alert.show();
    }
}

И твои активити, которые наследуются от родительского класса (BaseActivity):

import android.os.Bundle;
public class MainActivity extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        showAlert(this);
    }
}

В итоге ты вызываешь метод

showAlert(this);

который написан в BaseActivity в любом классе, который наследуется от него.

Если нужно изменять диалог в зависимости от экрана, то можно добавить дополнительные аргументы в метод в классе BaseActivity

READ ALSO
Какой символ использует DecimalFormat вместо пробела?

Какой символ использует DecimalFormat вместо пробела?

Пытаюсь убрать пробелы из строки, но ничего не происходит

300
java.sql.sqlexception access denied for user 'root'@'192.168.0.3'

java.sql.sqlexception access denied for user 'root'@'192.168.0.3'

Пытаюсь подключиться к базе запущенной из XAMPP с другого компьютера по локалкеАдрес сервера 192

176
Конструкторы с геттерами и сеттерами и их работа

Конструкторы с геттерами и сеттерами и их работа

Друзья! Я понял как работают сеттеры, геттеры и конструкторыНо не понял одну вещь:

170
RecyclerView к списку элементов

RecyclerView к списку элементов

Проблема следующего характера, создал список checkBox-ов при помощи recyclerView, наполняю его следующим образом:

177