[解決済み] Android ViewModelの追加引数
2022-04-28 05:30:58
質問
カスタムメソッドに追加の引数を渡す方法はありますか?
AndroidViewModel
のコンストラクタは、アプリケーションコンテキストを除きます。
例
public class MyViewModel extends AndroidViewModel {
private final LiveData<List<MyObject>> myObjectList;
private AppDatabase appDatabase;
public MyViewModel(Application application, String param) {
super(application);
appDatabase = AppDatabase.getDatabase(this.getApplication());
myObjectList = appDatabase.myOjectModel().getMyObjectByParam(param);
}
}
そして、自分のカスタム
ViewModel
クラスは、次のコードをフラグメントで使用します。
MyViewModel myViewModel = ViewModelProvider.of(this).get(MyViewModel.class)
そのため、追加の引数をどのように渡せばいいのかわかりません。
String param
をカスタム
ViewModel
. アプリケーションコンテキストだけを渡すことができ、追加の引数は渡せません。私は本当にどんな助けでも感謝します。ありがとうございました。
Edit: コードを追加しました。これでよくなると思います。
どのように解決するのですか?
ViewModelのファクトリークラスを用意する必要があります。
public class MyViewModelFactory implements ViewModelProvider.Factory {
private Application mApplication;
private String mParam;
public MyViewModelFactory(Application application, String param) {
mApplication = application;
mParam = param;
}
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
return (T) new MyViewModel(mApplication, mParam);
}
}
そして、ビューモデルをインスタンス化するときは、このようにします。
MyViewModel myViewModel = ViewModelProvider(this, new MyViewModelFactory(this.getApplication(), "my awesome param")).get(MyViewModel.class);
kotlinの場合、delegatedプロパティを使用することができます。
val viewModel: MyViewModel by viewModels { MyViewModelFactory(getApplication(), "my awesome param") }
また、もうひとつの新しいオプションとして
HasDefaultViewModelProviderFactory
をオーバーライドして
getDefaultViewModelProviderFactory()
をファクトリーのインスタンス化とともに呼び出し、その後に
ViewModelProvider(this)
または
by viewModels()
ファクトリーなし
関連
-
ジャークとして。起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりません アクティビティ起動中のエラー
-
android E/RecyclerView﹕ アダプタが接続されていないため、レイアウトをスキップする。
-
を作ってください。*** makeするルールがない エラーの原因、分析、解決策
-
telnet'が内部コマンドまたは外部コマンドとして認識されない 解決方法
-
アンドロイドスタジオソフトウェア使用詳細説明書
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Gradle のエラーです。gradle-core.jar (com.android.tools.build:gradle-core:x.x.x) を見つけられませんでした。
-
アンドロイドプロジェクトのパッケージングにgradleを使用する際の問題点
-
android studioが "The activity must be exported or contain an intent-filter" と表示され実行される。
-
アプリケーションがメインスレッドで過剰に作業している可能性があります。
-
エラータイプ 3 タイプエラー, Error: アクティビティクラス{}が存在しません。アクティビティ起動時のエラー 解決方法
-
WeChatとQQは、他のアプリのオープンリストに自分のアプリを追加し、ファイルパスを取得することができます
-
Android ProgressBarのスタイルカラーを変更する
-
Android基本アプレット
-
SpinnerのOnItemSelectedListenerのonItemSelectedメソッドの4つのパラメーターの意味
-
Androidカスタムドロップダウンリストボックスコントロール