私はユーティリティクラスを構築したいと思います。典型的なUIや対話機能を提供するデータベースから値を読み取る必要があります。アプリケーションのタイトルの設定、背景画像の設定、背景音楽の再生などがあります。UIのユーティリティクラスを構築する最善の方法
他の質問のためにHow to use UI functions in non UI methods?私はそれを行うためのさまざまな方法があることを認識しました。私は、あらゆる方法で、すべての方法でtitelを設定するためのさまざまな方法をテストしました。しかし、これは最もクリーンで正しい/自信を持って、なぜですか?
例では、呼び出し元クラスはkotlinクラスですが、これは無関係です。
ウェイワン!アクティビティに関連するすべてのアクティビティがコールアクティビティで実行されます。コンテキストはコンストラクタを経由して渡され、代わりにすべての関数呼び出しで呼び出すことができます。 私の意見では、ここではあまり依存していないが、ユーティリティユーザーは自分自身で多くのことをしなければならない。
呼び出し元のクラス:クラスと呼ばれる
frameworkFeatures(applicationContext);
setTitle(frameworkFeatures.frameworkSetTitlesStaticContext());
:
private static Context frameworkContext;
public frameworkFeatures(Context context) {
frameworkContext = context;
}
public static String frameworkSetTitlesStaticContext(){
TestMainDatabase.getDatabase(frameworkContext);
TestMainDatabase db = RoomAsset.databaseBuilder(frameworkContext, TestMainDatabase.class, "TestMainDatabase.db").allowMainThreadQueries().build();
return db.featuresDao().findByName("title").getFeatureValue().toString();
}
ウェイ2。可能な限り隠れる。すべてをユーティリティクラスに渡す必要があります。より多くのアクティビティで使用されている場合、これを処理する方法。 utilitieクラスの静的なActivity宣言ではまだ可能でしょうか?
呼び出し元のクラス:クラスと呼ばれる
frameworkFeatures(applicationContext,this)
frameworkFeatures.frameworkSetTitleEverythingisStatic()
:
private static Context frameworkContext;
private static Activity frameworkActivity;
private static TestMainDatabase frameworkTestMainDatabase;
public frameworkFeatures(Context context, Activity activity){
frameworkContext = context;
frameworkActivity = activity;
TestMainDatabase.getDatabase(context);
frameworkTestMainDatabase = RoomAsset.databaseBuilder(frameworkContext,TestMainDatabase.class, "TestMainDatabase.db").allowMainThreadQueries().build();
}
public static void frameworkSetTitleEverythingisStatic(){
frameworkActivity.setTitle(frameworkTestMainDatabase.featuresDao().findByName("title").getFeatureValue().toString());
}
万一sGlobalContextは、このクラスの静的コンテキスト変数です。一度に1つのアクティビティだけがアクティブになる可能性があるので、もう気にする必要はありません。クラスを「クリーンアップ」しても何の問題もなく、他のアクティビティが呼び出されますか? – freeLearning
ユーティリティが非アクティビティクラスから呼び出されたとき。私はそれらを初期化せずに呼び出すことができますか? – freeLearning
右 - ライフサイクルリスナーを登録するためにフレームワークを1回だけ初期化する必要があります。そしてコンテキストを渡す必要なしにあなたの 'API'を直接使用してください。 'frameworkSetTitle'と同様です。 'frameworkSetTitle'は、コンテキストがプライベート静的変数'に格納されるに 'Framework'のファサードに定義されたパッケージプライベート静的getterメソッドからそれを取るでしょうsGlobalContext' – j2ko