この質問で示唆されているようにGWT - 場所/アクティビティ/マッパーを使用しているときにコード分割をどこで使用する必要がありますか? 、アクティビティをネストするために ActivityProxy を作成しました。
このhttp://code.google.com/p/google-web-toolkit/issues/detail?id=5129 (6 番目のコメント)に基づいて実装し、1 つの変更を加えました。GWT を呼び出す前にプロバイダーのチェックを追加しました。 .RunAsync:
if (provider != null)
{
GWT.runAsync(new RunAsyncCallback()
{
@Override
public void onFailure(Throwable reason)
{
// ...
}
@Override
public void onSuccess()
{
ActivityProxy.this.nestedActivity = provider.create();
//...
}
});
}
しかし、何らかの理由で、これはリリース モードでは機能しません。onFailure メソッドは呼び出されませんが、最初に使用したときにアクティビティが表示されません。場所をリロードすると、すべてが正常に表示されます。
次に、次のことを行うと問題が解決することに気付きました。
GWT.runAsync(new RunAsyncCallback()
{
@Override
public void onFailure(Throwable reason)
{
// ...
}
@Override
public void onSuccess()
{
if (provider != null)
{
ActivityProxy.this.nestedActivity = provider.create();
//...
}
}
});
それで、なぜそれが機能するのか理解できなくても、私はすべての活動にそれを使い始めました.
ActivityProxy にジェネレーターを使用することにしたとき (アクティビティごとにプロバイダーを作成するのを避けるため)、再び問題に遭遇しました。シンタックスはGWT.create(ActivityProxy).wrap(MyActivity.class);
基本的に、生成されたコードは次のようになります。
if (clazz.getName() == "FooClass")
{
nestedActivity = new FooClass(); //inside a RunAsync
}
if (clazz.getName() == "BarClass")
{
nestedActivity = new BarClass(); //inside a RunAsync
}
そして、同じ問題が発生します。私のアプリは、最初にアクティビティを使用したときにアクティビティを表示できません。
とても単純な質問です。「なぜ?」