次の親コンテナがあります。
public class ParentContainer extends Composite {
// Contains a bunch of TextButtons (RedButton, GreenButton, etc.).
private LayoutPanel buttonPanel;
// When user clicks a TextButton inside the buttonPanel,
// it changes the content of this contentPanel.
private LayoutPanel contentPanel;
}
したがって、ユーザーが 内の TextButtons の 1 つをクリックするとbuttonPanel
、contentPanel
の内容が変更されます。アクティビティ/場所フレームワークを使用して、TextButton の各クリックを履歴に記憶させようとしています。したがって、ユーザーが「赤」、「緑」、「青」のボタンをそれぞれcontentPanel
クリックすると、 が 3 回変化し、[戻る]/[進む] ブラウザの履歴ボタンをクリックして、履歴を前後に移動し続けることができます (および "再生」ボタンを何度もクリックするなど)。
次のクラスもあります。
com.mywebapp
MainModule.gwt.xml
com.mywebapp.client
MainModule
com.mywebapp.client.places
RedButtonPlace
GreenButtonPlace
BlueButtonPlace
... 1 place for all buttons
com.mywebapp.client.activities
RedButtonActivity
GreenButtonActivity
BlueButtonActivity
... 1 activity for all buttons
com.mywebapp.client.ui
ParentContainer
RedButton
GreenButton
BlueButton
BlackButton
PurpleButton
OrangeButton
次のように配線することを計画しています。
PlaceController.goTo(new RedButtonPlace())
最終的にはRedButtonActivity
PlaceController.goTo(new GreenButtonPlace())
最終的にはGreenButtonActivity
- など(すべてのボタンには、その色ごとに場所とアクティビティがあります)
私が行き詰まっているのは、クリックハンドラーPlaceController.goTo(new RedButtonPlace())
内から呼び出した場合、 updateをどこでどのように指示するのですか? RedButton
RedButtonActivity
contentPanel
例えば:
public class RedButton extends TextButton {
// ... bunch of stuff, nevermind why I am extending TextButton
// this is just to help me connect all the major dots of GWT!
public RedButton() {
this.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
// If the RedButton is clicked, we want all the content in RedButtonActivity#RedButtonView
// to go inside ParentContainer#contentPanel.
PlaceController.goto(new RedButtonPlace());
}
});
}
}
public class RedButtonActivity extends AbstractActivity {
public interface RedButtonView extends IsWidget {
// Whatever the RedButton expects to be able to display.
}
private RedButtonView view;
@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
// Probably injected via GIN.
view = somehowInjectTheView();
panel.setWidget(view);
}
}
その最後の行がここでの鍵です: panel.setWidget(view)
. panel
それが であることをどのように確認しParentContainer#contentPanel
ますか? 前もって感謝します!
編集:1つの回答が示唆するように、コードの更新は次のとおりです。
public class ParentContainer extends Composite {
// All the stuff that's up above in the first parent container.
public ParentContainer() {
super();
// Again, via GIN.
ActivityManager redButtonActivityManager = getSomehow();
redButtonActivityManager.setDisplay(contentPanel);
}
}
これが正しい方法である場合、start(AcceptsOneWidget panel, EventBus eventBus)
メソッドが呼び出されたときに、引数redButtonActivityManager
の正しい表示を挿入することを知っていると思いますか?panel