Код, который вы опубликовали, не имеет отношения к ответу на ваш вопрос. Допустим, у вас есть 4 докладчикам:
- MainPresenter
- HeaderPresenter
- NavigationPresenter
- Главная Presenter
MainPresenter
будет содержать 3 других ведущих. Когда место отображается (дома), происходит событие.
HomePresenter
код:
@Override
protected void revealInParent() {
// trigger the setInSlot of MainPageView
RevealContentEvent.fire(this, MainPagePresenter.TYPE_SetMainContent,
this);
}
Тогда это событие обрабатывается setInSlot
из MainPageView
который добавляет содержание к одному из слота. Вот почему MainPresenter
должен иметь 3 слота с помощью следующего кода:
@ContentSlot
public static final Type<RevealContentHandler<?>> TYPE_SetMainContent = new Type<RevealContentHandler<?>>();
@ContentSlot
public static final Type<RevealContentHandler<?>> TYPE_SetHeaderContent = new Type<RevealContentHandler<?>>();
@ContentSlot
public static final Type<RevealContentHandler<?>> TYPE_SetNavigationContent = new Type<RevealContentHandler<?>>();
private boolean headerNavigationDisplayed = false;
@Inject
public MainPagePresenter(final EventBus eventBus, final MyView view,
final MyProxy proxy) {
super(eventBus, view, proxy);
}
@Override
protected void revealInParent() {
// trigger setInSlot in the RootView
RevealRootContentEvent.fire(this, this);
}
@Override
protected void onReveal() {
super.onReveal();
if (!headerNavigationDisplayed) {
// Fire this event to force reveal the header and navigation
// presenters
MainContentSetEvent.fire(this, "ThreePart");
headerNavigationDisplayed = true;
}
}
Когда MainPagePresenter
раскрывается. Он запускает пользовательское событие MainContentSetEvent
. У меня есть параметр, но он вам не нужен. Для обработки этого события HeaderPresenter
должен реализовывать интерфейс the
MainContentSetHandler`. Вставьте следующий код:
@Override
protected void revealInParent() {
RevealContentEvent.fire(this, MainPagePresenter.TYPE_SetHeaderContent,
this);
}
@ProxyEvent
@Override
public void onMainContentSet(MainContentSetEvent event) {
forceReveal();
}
Сделайте то же самое для NavigationPresenter
. Вставьте следующий код:
@Override
protected void revealInParent() {
RevealContentEvent.fire(this,
MainPagePresenter.TYPE_SetNavigationContent, this);
}
@ProxyEvent
@Override
public void onMainContentSet(MainContentSetEvent event) {
layout = event.getLayout();
forceReveal();
}
На вид сбоку, поместите следующий код в MainPageView
:
@Override
public void setInSlot(Object slot, Widget content) {
if (slot == MainPagePresenter.TYPE_SetMainContent) {
setMainContent(content);
} else if (slot == MainPagePresenter.TYPE_SetHeaderContent) {
setHeaderContent(content);
} else if (slot == MainPagePresenter.TYPE_SetNavigationContent) {
setNavigationContent(content);
} else {
super.setInSlot(slot, content);
}
}
Если вы хотите, чтобы понять весь механизм, работать в режиме отладки, это легче понять иерархия вызовов. Я помещаю только соответствующий код, так как вам известно о SimpleNestetExample
, вы должны иметь возможность написать недостающий код.
Вы не называете setinslot (..) на презентаторе, и это делает работу? – HaveAGuess