Вызов MainActivity.this из класса не MainActivity. Как?

92
31 мая 2021, 17:00

пытаюсь вызвать MainActivity.this .. но он подчёркивается красным и не хочет подставляться. Как к нему обратить? Представляю код:


public class Timer {
    private CountDownTimer currentTimer;
    AlertDialog.Builder builder;
    public Timer(long millisInFuture, final long countDownInterval, final ITimerCallback callback) {
        currentTimer = new CountDownTimer(millisInFuture, countDownInterval) {
            @Override
            public void onTick(long millisUntilFinished) {
                long time = millisUntilFinished / 1000;
                callback.ontTimerNewValue(String.valueOf(time));
            }
            @Override
            public void onFinish() {
                callback.ontTimerNewValue("ОК");
                builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("Важное сообщение!")

Суть в том что я так понял что тут такое обращение не является context. Решения сколько пытался найти, ничего не работает. Помогите кто сможет. Спасибо!

Answer 1

Передавайте Context через параметр в конструкторе:

public class Timer {
private CountDownTimer currentTimer;
private Context context;
AlertDialog.Builder builder;
public Timer(long millisInFuture, final long countDownInterval, final ITimerCallback callback, Context context) {
    this.context=context;
    currentTimer = new CountDownTimer(millisInFuture, countDownInterval) {
        @Override
        public void onTick(long millisUntilFinished) {
            long time = millisUntilFinished / 1000;
            callback.ontTimerNewValue(String.valueOf(time));
        }
        @Override
        public void onFinish() {
            callback.ontTimerNewValue("ОК");
            builder = new AlertDialog.Builder(context);
            builder.setTitle("Важное сообщение!")
Answer 2

Если Вам необходимо что-то сделать в активити после какого-то события в таймере - сделайте callback, реализуйте метод callback'a в активити (то что вы хотели делать в самом таймере). Сущность класса Timer не должна ничего решать проверять и делать внутри себя, эта сущность делает конкретную задачу и дергает методы callback'a.

В ITimerCallback добавьте отдельный метод onTimerFinish() - и дергайте его в методе onFinish - самого таймера. В активити создавайте свой диалог.

READ ALSO
Как отлавливать бездействие на сайте?

Как отлавливать бездействие на сайте?

Хочу на страницах создаваемого сайта отлавливать сабж (допустим 30 сек ни мышки, ни клавы, ни тачпада, ни ресайза) и запускать какую-нибудь...

112
Как правильно импортировать lodash?

Как правильно импортировать lodash?

Сам я не любитель lodash, но пришел на (фронтовый что важно) проект где активно используется эта библиотекаДо сих пор ее использовали так:

108
Почему не определяется длина объекта, полученного из хранилища Vuex?

Почему не определяется длина объекта, полученного из хранилища Vuex?

Использую хранилище Vuex, чтобы отфильтровать новости по авторуВот основные элементы:

106