ResourceManagerImpl
問題は、そうではないために拡張できないことではfinal
なく、実装をデフォルトのアプリケーションではなくアプリケーションに登録できる必要があることです。そして、これを行うのは少しトリッキーです。
したがって、最初に実装を作成します。
public class MyResourceManager extends ResourceManagerImpl {
private static var instance:IResourceManager;
static public function getInstance():IResourceManager
{
if (!instance) instance = new MyResourceManager();
return instance;
}
override public function getStringArray(bundleName:String,
resourceName:String,
locale:String = null):Array {
//do your stuff
}
}
getStringArray
そのため、メソッドをオーバーライドしました。の代わりに のgetInstance
新しいインスタンスを返すようにするため、に対して同じことを行ったことに注意してください (メソッドなのでマークする必要はありません)。また、使用しているクラスの一部が「除外」としてマークされているため、いくつかの import ステートメントを手動で作成する必要がある場合があります。MyResourceManager
ResourceManagerImpl
override
static
今度は Flex にMyResourceManager
の代わりに使用するように指示する必要がありResourceManagerImpl
ます。これは、次のコードで実行できます。
import mx.core.Singleton;
Singleton.registerClass("mx.resources::IResourceManager", MyResourceManager);
問題は、Flex が登録される前にこれを行う必要があることResourceManagerImpl
です。これは、一度登録するとオーバーライドできないためです。このためには、登録を行うカスタム プリローダーを作成する必要があります (残念ながら、アプリケーションの「事前初期化」フェーズは十分に早くありません)。
public class RegisteringPreloader extends DownloadProgressBar {
override public function initialize():void {
super.initialize();
Singleton.registerClass("mx.resources::IResourceManager",
MyResourceManager);
}
}
カスタムプリローダーをアプリケーションに割り当てれば完了です。
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
preloader="RegisteringPreloader" >
詳細については、かなり似ていますが、別の質問に対して書いたやや精巧な回答を参照してください。ポップアップマネージャークラスでイベントをリッスンする方法はありますか?