web-dev-qa-db-ja.com

クリックリスナーをmvvmのどこに配置するかandroid

AndroidプロジェクトでMVVMデザインパターンに従おうとしていますが、いくつかの問題に直面しました。
1。クリックリスナーをどこに配置するか、ViewModelに配置するか、アクションが別のアクティビティ/フラグメントに転送する場合、または別のビューにリダイレクトせずにロジックを実行する場合は、ビューに配置するかがわかりません
2。共有設定がモデルに組み込まれることはわかっていましたが、すべての共有設定にのみ別のクラスを作成するか、モデルクラスの例に入れます。ログイン時に、ユーザー名とパスワードを保存したいのですが、UserModelで共有設定関数を作成しますか?新しいクラスを作成し、SharedPreferenceという名前を付けますか?

前もって感謝します。

9
Muhamed Raafat
  1. リスナーはまだビューの一部であるため、オンクリックリスナーをビューモデルではなくアクティビティ/フラグメントに配置します。

  2. 共有プリファレンスメソッドは、ビューモデル自体の内部で呼び出さないでください。代わりに、ビューモデルに、共有プリファレンスへの情報の保存を行うクラスを呼び出させます。この場合、リポジトリパターンを使用することをお勧めします。ビューモデルは、リポジトリからメソッドx()を呼び出し、メソッドx()は、共有設定を通じて情報の保存を実行します。 、ローカルデータベース、またはクラウド経由。

15
Harrison Tiu
   <Button
       Android:id="@+id/btn_nw"
       Android:layout_width="wrap_content"
       Android:layout_height="wrap_content"
       Android:onClick="@{() -> viewModel.testLoginModuleClicked()}"
       Android:text="Login"/>

ViewModelクラス内

val loginClickEvent = SingleLiveEvent<Void>()
fun testLoginModuleClicked() {
    loginClickEvent.call()
}

あなたの活動/フラグメントクラスで

 loginVM.loginClickEvent.observe(this, Observer {
        callMockApi()
    })
0
Subham Naik
  <LinearLayout
      Android:id="@+id/item_people"
      Android:layout_width="match_parent"
      Android:layout_height="wrap_content"
      Android:clickable="true"
      Android:orientation="vertical"
      Android:onClick="@{stateViewModel::onItemClick}">

  </LinearLayout>

viewmodelで

 public void onItemClick(View v){

    }

ビューモードで関数を作成することにより、クリックリスナーを追加できます。

次に、共有の優先順位について、アプリ全体で使用できるように、common。でutilsファイルを作成します。

0
Dinesh Raj