Search code examples
androidfragmentkotlin

How to pass and get value from fragment and activity


How to pass and get value from fragment and activity?


Solution

  • Here is the Android Studio proposed solution (= when you create a Blank-Fragment with File -> New -> Fragment -> Fragment(Blank) and you check "include fragment factory methods").

    Put this in your Fragment:

    class MyFragment: Fragment {
    
    ...
    
        companion object {
    
                @JvmStatic
                fun newInstance(isMyBoolean: Boolean) = MyFragment().apply {
                    arguments = Bundle().apply {
                        putBoolean("REPLACE WITH A STRING CONSTANT", isMyBoolean)
                    }
                }
         }
    }
    

    .apply is a nice trick to set data when an object is created, or as they state here:

    Calls the specified function [block] with this value as its receiver and returns this value.

    Then in your Activity or Fragment do:

    val fragment = MyFragment.newInstance(false)
    ... // transaction stuff happening here
    

    and read the Arguments in your Fragment such as:

    private var isMyBoolean = false
    
    override fun onAttach(context: Context?) {
        super.onAttach(context)
        arguments?.getBoolean("REPLACE WITH A STRING CONSTANT")?.let {
            isMyBoolean = it
        }
    }
    

    Enjoy the magic of Kotlin!