В моем приложении для 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.
Для меня это кажется очень некрасивым. Каков элегантный способ получить обратный вызов?
Вы можете привести f к ПрогрессбарОбратный звонок((ProgressbarCallback) f).updateProgress(i)
@SergeyGlotov Я создаю экземпляр и показываю этот фрагмент во внутреннем методе в DataManager .. Но updateProgress я вызываю из нескольких мест, поэтому мне пришлось сделать свой фрагмент переменной-членом DataManager. Я пытался избежать использования переменных-членов
Вы можете привести f к ProgressbarCallback
((ProgressbarCallback) f).updateProgress(i)
Он также носится без гипса. хорошо, теперь у меня есть ProgressShowerFragment в качестве переменной-члена.
Геттер не нужен. В ProgressShowerFragment уже реализован обратный вызов, так что можно просто
progressCallback = ProgressShowerFragment.getInstance();Что именно вам кажется некрасивым?