【问题标题】:How to listen to change between fragments如何听片段之间的变化
【发布时间】:2021-01-13 23:35:25
【问题描述】:

我试图找到一种简单的方法来收听我的活动中的片段更改,以便从我的 LoginFragment 隐藏/显示抽屉菜单按钮,但我在 sfo 中找不到一个好的和简单的方法来实现我的案例,所以我想分享一个简单的解决方案,我最终使用ViewModelLiveData 来保存当前显示的片段类名称,并从活动中观察它以监听变化。

注意如果您的片段显示在布局中的同一 FragmentContainerView 上,则该解决方案有效

【问题讨论】:

    标签: android kotlin android-fragments viewmodel android-livedata


    【解决方案1】:

    这是一个例子:

    ViewModel 类:

    class MyViewModel : ViewModel(){
    
       val currentFragment = MutableLiveData<String>()
    }
    

    现在在片段中设置 currentFragment 值:

    class LoginFragment() : Fragment() {
    
    private lateinit var : viewModel : MyViewModel
      override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            ViewModel = ViewModelProvider(requireActivity()).get(MyViewModel::class.java)
            ViewModel.currentFragment.value = this::class.java.name
       }
    }
    
    class MainFragment() : Fragment() {
    
    private lateinit var : viewModel : MyViewModel
      override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            ViewModel = ViewModelProvider(requireActivity()).get(MyViewModel::class.java)
            ViewModel.currentFragment.value = this::class.java.name
       }
    }
    

    现在在您的 Activity 中,您可以观察 currentFragment 并做任何您想做的事情(在我的情况下,我想知道当前片段是否是 LoginFragment 并从工具栏中隐藏抽屉菜单按钮):

    class MainActivity() : AppCompatActivity() {
    
     override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            mapViewModel.currentFragment.observe(this, {
                when (it) {
                    LoginFragment::class.java.name -> {
                        //your stuff related to LoginFragment
                    }
                    MainFragment::class.java.name -> {
                        //your stuff related to MainFragment
                    }
                }
            })
        } 
    }
    
    

    希望这对任何人都有帮助^^

    【讨论】:

      猜你喜欢
      • 2015-07-06
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 2014-02-09
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多