Is there a method that works like start fragment for result?

后端 未结 10 1300
孤城傲影
孤城傲影 2020-12-02 09:51

I currently have a fragment in an overlay. This is for signing in to the service. In the phone app, each of the steps I want to show in the overlay are their own screens and

10条回答
  •  心在旅途
    2020-12-02 09:58

    We can simply share the same ViewModel between fragments

    SharedViewModel

    import android.arch.lifecycle.MutableLiveData
    import android.arch.lifecycle.ViewModel
    
    class SharedViewModel : ViewModel() {
    
        val stringData: MutableLiveData by lazy {
            MutableLiveData()
        }
    
    }
    

    FirstFragment

    import android.arch.lifecycle.Observer
    import android.os.Bundle
    import android.arch.lifecycle.ViewModelProviders
    import android.support.v4.app.Fragment
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    
    class FirstFragment : Fragment() {
    
        private lateinit var sharedViewModel: SharedViewModel
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            activity?.run {
                sharedViewModel = ViewModelProviders.of(activity).get(SharedViewModel::class.java)
            }
        }
    
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                                  savedInstanceState: Bundle?): View? {
            return inflater.inflate(R.layout.fragment_first, container, false)
        }
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
    
            sharedViewModel.stringData.observe(this, Observer { dateString ->
                // get the changed String
            })
    
        }
    
    }
    

    SecondFragment

    import android.arch.lifecycle.ViewModelProviders
    import android.os.Bundle
    import android.support.v4.app.Fragment
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGrou
    
    class SecondFragment : Fragment() {
    
        private lateinit var sharedViewModel: SharedViewModel
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            activity?.run {
                sharedViewModel = ViewModelProviders.of(activity).get(SharedViewModel::class.java)
            }
        }
    
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                                  savedInstanceState: Bundle?): View? {
            return inflater.inflate(R.layout.fragment_first, container, false)
        }
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            changeString()
        }
    
        private fun changeString() {
            sharedViewModel.stringData.value = "Test"
        }
    
    }
    

提交回复
热议问题