ビューモデルのDialogFragmentがデータバインディングで機能しない

か否か

ビューモデル(mvvm)を使用して1つのダイアログフラグメントを作成しました。ダイアログは1つのボタンで構成されています(カスタムビュー)。データバインディングでビューモデルを使用している場合、ライブデータの変更時にボタンのクリックが機能しません。ブール値を使用して、ボタンがクリックされているかどうかを確認しています。問題の原因は何ですか?また、必要に応じて他のアプローチを提案します。

profile_dialog_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="viewmodel"
            type="com.test.ui.ProfileDialogViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ui.ProfileDialog">

        <com.google.android.material.button.MaterialButton
            android:id="@+id/login"
            style="@style/TextAppearance.MaterialComponents.Button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Login"
            android:onClick="@{() -> viewmodel.onLoginButtonClick()}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

ProfileDialog.kt

class ProfileDialog : DialogFragment() {

    companion object {
        fun newInstance() = ProfileDialog()
    }

    private val viewModel: ProfileDialogViewModel by viewModel()

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val binding = ProfileDialogFragmentBinding.inflate(inflater, container, false)
            .apply {
                this.lifecycleOwner = this@ProfileDialog
                this.viewmodel = viewmodel
            }
        return binding.root
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        viewModel.startLogin.observe(viewLifecycleOwner, Observer {

            Log.d("insta", "This is working")
            if (it == null) return@Observer

            if(it) {
                Log.d("insta", "This is not working")
                val loginIntent = Intent(this.context, LoginActivity::class.java)
                this.context?.startActivity(loginIntent)
            }
        })
    }

}

ProfileDialogViewModel.kt

class ProfileDialogViewModel : ViewModel() {

    private val _startLogin = MutableLiveData<Boolean>(false)

    val startLogin: LiveData<Boolean>
        get() = _startLogin

    fun onLoginButtonClick() {
        Log.d("insta", "This ain't working")
        _startLogin.postValue(true)
    }
}
ConstOrVar

ビューモデルはで定義されています

private val viewModel: ProfileDialogViewModel by viewModel()

だから、見るために注意を払うのM odelを。にある問題

this.viewmodel = viewmodel

ここではをthis指しProfileDialogFragmentBindingます。ここであなたは主張しますProfileDialogFragmentBinding.viewmodel = ProfileDialogFragmentBinding.viewmodel-それがそれが機能していない理由です。

問題を解決するには、次のように適切に割り当てます。

this.viewmodel = viewModel

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Androidのデータバインディングとビューモデルが機能しない

分類Dev

部分ビュー内でモデルバインディングが機能しない

分類Dev

Androidデータバインディングがビュー 'android:tag'プロパティで機能しない

分類Dev

ビュー内で角度データバインディングが機能しない

分類Dev

MVVM +データバインディング+ビューモデルがビューを更新しない

分類Dev

コードビハインドでのデータバインディングが機能しない

分類Dev

インクルードレイアウトのビューバインディングが機能しない

分類Dev

TextWatcherのデータバインディングがAndroidで機能しない

分類Dev

ルートでのLaravel5.5モデルバインディングが機能しない

分類Dev

Laravel5ルートモデルバインディングがサーバーで機能しない

分類Dev

グリッドビューバインディングが機能しない

分類Dev

Androidデータバインディングがリサイクルビューで正しく機能しない

分類Dev

カルーセルビューとリストビューのバインディングがXamarinフォームで機能しない

分類Dev

MVCモデルバインディングが12時間のタイムスパンで機能しない

分類Dev

バインディングが機能しない条件付きビュー

分類Dev

Ember.js:ビューバインディングが機能しない

分類Dev

Androidデータバインディングが<merge>属性で機能しない

分類Dev

Androidデータバインディングが<merge>属性で機能しない

分類Dev

UWPデータバインディングがViewModelで機能しない

分類Dev

VueJSデータバインディングがimgsrcで機能しない

分類Dev

AngularJSでデータバインディングが機能しない

分類Dev

AngularJSでデータバインディングが機能しない

分類Dev

双方向データバインディングが式で機能しない

分類Dev

Silverlightでデータバインディングが機能しない

分類Dev

Anroid RecyclerViewのデータバインディングが機能しない(Kotlin)

分類Dev

TextBoxへのデータバインディングが機能しない

分類Dev

データバインディングが制約レイアウトグループで機能しない

分類Dev

現在、データバインディングは非基本機能モジュールでは機能しません。データバインディングコードを基本機能モジュールに移動してください

分類Dev

スタイルセッターでのUWPバインディングが機能しない

Related 関連記事

  1. 1

    Androidのデータバインディングとビューモデルが機能しない

  2. 2

    部分ビュー内でモデルバインディングが機能しない

  3. 3

    Androidデータバインディングがビュー 'android:tag'プロパティで機能しない

  4. 4

    ビュー内で角度データバインディングが機能しない

  5. 5

    MVVM +データバインディング+ビューモデルがビューを更新しない

  6. 6

    コードビハインドでのデータバインディングが機能しない

  7. 7

    インクルードレイアウトのビューバインディングが機能しない

  8. 8

    TextWatcherのデータバインディングがAndroidで機能しない

  9. 9

    ルートでのLaravel5.5モデルバインディングが機能しない

  10. 10

    Laravel5ルートモデルバインディングがサーバーで機能しない

  11. 11

    グリッドビューバインディングが機能しない

  12. 12

    Androidデータバインディングがリサイクルビューで正しく機能しない

  13. 13

    カルーセルビューとリストビューのバインディングがXamarinフォームで機能しない

  14. 14

    MVCモデルバインディングが12時間のタイムスパンで機能しない

  15. 15

    バインディングが機能しない条件付きビュー

  16. 16

    Ember.js:ビューバインディングが機能しない

  17. 17

    Androidデータバインディングが<merge>属性で機能しない

  18. 18

    Androidデータバインディングが<merge>属性で機能しない

  19. 19

    UWPデータバインディングがViewModelで機能しない

  20. 20

    VueJSデータバインディングがimgsrcで機能しない

  21. 21

    AngularJSでデータバインディングが機能しない

  22. 22

    AngularJSでデータバインディングが機能しない

  23. 23

    双方向データバインディングが式で機能しない

  24. 24

    Silverlightでデータバインディングが機能しない

  25. 25

    Anroid RecyclerViewのデータバインディングが機能しない(Kotlin)

  26. 26

    TextBoxへのデータバインディングが機能しない

  27. 27

    データバインディングが制約レイアウトグループで機能しない

  28. 28

    現在、データバインディングは非基本機能モジュールでは機能しません。データバインディングコードを基本機能モジュールに移動してください

  29. 29

    スタイルセッターでのUWPバインディングが機能しない

ホットタグ

アーカイブ