投稿したコードは、質問への回答には関係ありません。プレゼンターが 4 人いるとします。
- メインプレゼンター
- ヘッダープレゼンター
- NavigationPresenter
- ホームプレゼンター
には、他の 3 人のMainPresenter
プレゼンターが含まれます。場所 (自宅) が明らかになると、イベントが発生します。
HomePresenter
コード:
@Override
protected void revealInParent() {
// trigger the setInSlot of MainPageView
RevealContentEvent.fire(this, MainPagePresenter.TYPE_SetMainContent,
this);
}
次に、このイベントはsetInSlot
ofによって処理されMainPageView
、スロットの 1 つにコンテンツが追加されます。そのため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
。パラメータがありますが、あなたには必要ありません。このイベントを処理するには、MainContentSetHandler` インターフェイスHeaderPresenter
を実装する必要があります。the
次のコードを挿入します。
@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
ます。