0

次の親コンテナがあります。

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 つをクリックするとbuttonPanelcontentPanelの内容が変更されます。アクティビティ/場所フレームワークを使用して、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をどこでどのように指示するのですか? RedButtonRedButtonActivitycontentPanel例えば:

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

4

1 に答える 1

1

マネージャーの初期化の一部として、ParentContainer#contentPanelを のsetDisplay()メソッドに渡します。ActivityManager

于 2012-11-07T21:54:35.620 に答える