あなたが投稿したコードはあなたの質問に答えても関係ありません。
- MainPresenter
- HeaderPresenter
- NavigationPresenter
- ホームプレゼンター
MainPresenter
は3人の他のプレゼンターが含まれます:あなたは4人のプレゼンターを持っているとしましょう。場所が公開されると、イベントが発生します。
HomePresenter
コード:
@Override
protected void revealInParent() {
// trigger the setInSlot of MainPageView
RevealContentEvent.fire(this, MainPagePresenter.TYPE_SetMainContent,
this);
}
そしてこのイベントはスロットのいずれかにコンテンツを追加MainPageView
のsetInSlot
によって処理されます。 MainPagePresenter
が明らかにされている場合
@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;
}
}
:MainPresenter
次のコードで3つのスロットを持つべき理由です。カスタムイベント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