一つの画面に異なるフラグメント(MainFragmentとSubFragment)を配置し、ViewModelでデータ共有しています。
MainFragmentのButtonをタップしたら、MainFragmentおよびSubFragmentそれぞれに配置したTextViewの中身を同時に同じ値にしたいと思ってます。
以下の通りコーディングしたところ、MainFragmentのTextViewしかカウントアップしません。SubFragmentのTextViewも同時にカウントアップさせたいのですが、どの様に直せば良いでしょうか?
Kotlin
1//MainFragment.kt 2class MainFragment :Fragment() { 3 4 private lateinit var viewModel: DataViewModel 5 private lateinit var binding: FragmentMainBinding 6 7 override fun onCreateView( 8 inflater: LayoutInflater, 9 container: ViewGroup?, 10 savedInstanceState: Bundle? 11 ): View? { 12 binding = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false) 13 viewModel = ViewModelProviders.of(this).get(DataViewModel::class.java) 14 binding.dataViewModel = viewModel 15 binding.lifecycleOwner = viewLifecycleOwner 16 17 return binding.root 18 } 19}
Kotlin
1//SubFragment.kt 2class SubFragment: Fragment() { 3 4 private lateinit var viewModel: DataViewModel 5 private lateinit var binding: FragmentSubBinding 6 7 override fun onCreateView( 8 inflater: LayoutInflater, 9 container: ViewGroup?, 10 savedInstanceState: Bundle? 11 ): View? { 12 binding = DataBindingUtil.inflate(inflater, R.layout.fragment_sub, container, false) 13 viewModel = ViewModelProviders.of(this).get(DataViewModel::class.java) 14 binding.dataViewModel = viewModel 15 binding.lifecycleOwner = viewLifecycleOwner 16 17 return binding.root 18 } 19 20}
Kotlin
1//DataViewModel.kt 2class DataViewModel: ViewModel() { 3 4 private var _variable = MutableLiveData<Int>() 5 val variable: LiveData<Int> = _variable 6 7 init { 8 _variable.value = 1 9 } 10 11 fun count() { 12 _variable.value = (_variable.value)!!.plus(1) 13 } 14}
XML
1//fragment_main.xml 2<layout 3 ...> 4 5 <data> 6 <variable 7 name="dataViewModel" 8 type="com.example.trial_mvvm.DataViewModel" /> 9 </data> 10 11 <androidx.constraintlayout.widget.ConstraintLayout 12 ...> 13 <Button 14 ... 15 android:onClick="@{() -> dataViewModel.count()}" 16 .../> 17 18 <TextView 19 ... 20 android:text="@{String.valueOf(dataViewModel.variable)}" 21 .../> 22 </androidx.constraintlayout.widget.ConstraintLayout> 23</layout>
XML
1//fragment_sub.xml 2<layout 3 ...> 4 5 <data> 6 <variable 7 name="dataViewModel" 8 type="com.example.trial_mvvm.DataViewModel" /> 9 </data> 10 11 <androidx.constraintlayout.widget.ConstraintLayout 12 ...> 13 14 <TextView 15 ... 16 android:text="@{String.valueOf(dataViewModel.variable)}" 17 .../> 18 </androidx.constraintlayout.widget.ConstraintLayout> 19</layout>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/18 11:38