How to pass and get value from fragment and activity

Viewed 75138

How to pass and get value from fragment and activity?

10 Answers

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!

There is the companion object for that (https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects )

Define your fragment as usual, and declare the companion that acts as the static newInstance() equivalent in Java :

class ViewStackListFragment : Fragment() {
  companion object {
        fun newInstance(position: Int): ViewStackListFragment {
            val fragment = ViewStackListFragment()
            val args = Bundle()
            args.putInt("position", position)
            fragment.setArguments(args)
            return fragment
        }
    }
}

And simply call it like in Java :

val fragment = ViewStackListFragment.newInstance(4)

use this to send arguments to fragment

fun newInstance(index: Int): MyFragment {
    val f = MyFragment ()
    // Pass index input as an argument.
    val args = Bundle()
    args.putInt("index", index)
    f.setArguments(args)
    return f
}

And get those arguments like this

val args = arguments
val index = args.getInt("index", 0)

Kotlin, Fragment: for pass

companion object {
    private const val ARGUMENT_ACTION = "ARGUMENT_ACTION"

    fun newInstance(action: Int) : MyFragment{
        return MyFragment().apply {
            arguments = bundleOf(ARGUMENT_ACTION to action)
        }
    }
}

for get

requireArguments().getInt(ARGUMENT_ACTION)

To pass and get value from fragment and activity,

val mFragment = Fragment()
val mArgs = Bundle()
mArgs.putInt("Key", value)
mFragment.setArguments(mArgs)

Use this piece of code in your second Activity/Fragment to get your values.

var args = getArguments()
var index = args.getInt("Key", 0)

In one source code I found this version:

class ConfirmPasswordActivity : Activity {

companion object {
    lateinit var person: Person
    fun newIntent(context: Context, person: Person) = run {
        this.person = person
        Intent(context, ConfirmPasswordActivity::class.java)
    }
}
private fun setOnClickListeners() {
    ib_back.setOnClickListener { finish() }
    btn_confirm_password.setOnClickListener {
        onNext(UiEvents.OnBtnConfirmClicked(person))
    }
}

In Kotlin, I can create Fragments and Passing values to another fragment by,

1.First Fragment in which put String.
`

   val storedVerificationId:String = "verificationId"                                                                    
   val fragmentTransaction = fragmentManager?.beginTransaction()
                val bundle = Bundle().apply {
                    putString("storedVerificationId",storedVerificationId) //string and value.
                }

                val fragInfo = otpFragment() //otpFragment is Another Fragment name
                fragInfo.arguments = bundle //bundle in which values stored
                fragmentTransaction!!.replace(R.id.myDrawerlayout,fragInfo) //replace in main activity 
                fragmentTransaction.commit()

`

2.Second Fragment In which getString.

val verificationId = this.arguments?.getString("storedVerificationId")

Related