Как я могу получить интерфейс из его класса реализации?

В моем приложении для Android у меня есть контроллер DataManager, где я выполняю некоторые операции по передаче данных, и я определил (среди прочего) интерфейс ProgressbarCallback, чтобы показать прогресс в другом зависимом фрагменте:

public class DataManager {

    ProgressbarCallback progressbarCallback;

    public interface ProgressbarCallback {
        void updateProgress(int progress);
    }

    //2
    ProgressShowerFragment f = ProgressShowerFragment.getInstance();
    progressCallback = f.getCallback();

    //3
    progressCallback.updateProgress(i)
}

там я хотел бы контролировать индикатор выполнения зависимого фрагмента. Итак, у меня есть ProgressShowerFragment, чтобы показать мой прогресс:

public class ProgressShowerFragment extends Fragment implements DataManager.ProgressbarCallback {

    @Override
    public void updateProgress(int progress) {
        progresBar.setProgress(progress);
    }

    //1
    public ProgressbarCallback getCallback(){
        return this;
    } 
}

Чтобы иметь ссылку в моем DataManager, я сделал геттер (см. 1), который возвращает обратный вызов. При создании экземпляра ProgressShowerFragment я также получаю этот обратный вызов (см. 2).

Позже при использовании я обновляю прогресс, как в 3.

Для меня это кажется очень некрасивым. Каков элегантный способ получить обратный вызов?

Геттер не нужен. В ProgressShowerFragment уже реализован обратный вызов, так что можно просто progressCallback = ProgressShowerFragment.getInstance(); Что именно вам кажется некрасивым?

Sergey Glotov 07.02.2019 15:57

Вы можете привести f к ПрогрессбарОбратный звонок((ProgressbarCallback) f).updateProgress(i)

dtunctuncer 07.02.2019 16:55

@SergeyGlotov Я создаю экземпляр и показываю этот фрагмент во внутреннем методе в DataManager .. Но updateProgress я вызываю из нескольких мест, поэтому мне пришлось сделать свой фрагмент переменной-членом DataManager. Я пытался избежать использования переменных-членов

Tranquillo 07.02.2019 17:03
1
3
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете привести f к ProgressbarCallback

((ProgressbarCallback) f).updateProgress(i)

Он также носится без гипса. хорошо, теперь у меня есть ProgressShowerFragment в качестве переменной-члена.

Tranquillo 07.02.2019 17:00

Другие вопросы по теме