How to pass and get value from fragment and activity

前端 未结 9 1209
独厮守ぢ
独厮守ぢ 2020-12-25 11:28

How to pass and get value from fragment and activity?

相关标签:
9条回答
  • 2020-12-25 12:00
      val otpFragment = OtpFragment()
      val bundle = Bundle()
      bundle.putString("otp", loginDetails[0].otp)
      otpFragment.arguments = bundle
      CommonUtil.changeFragment(otpFragment, R.id.flLogin, Login.manager, R.anim.enter_anim, R.anim.exit_anim)
    
    0 讨论(0)
  • 2020-12-25 12:01

    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!

    0 讨论(0)
  • 2020-12-25 12:02

    Do it in more Kotlin style

    1) Create an inline function:

    inline fun <FRAGMENT : Fragment> FRAGMENT.putArgs(argsBuilder: Bundle.() -> Unit): FRAGMENT = this.apply { arguments = Bundle().apply(argsBuilder) }
    

    2) Now you can use this extension in all fragments without duplication of code:

    class MyFragment: Fragment() {
        companion object {
            fun newInstance(name: String) = MyFragment().putArgs {
                 putString("nameKey", name)
            }
        }
    }
    
    class MyFragment1: Fragment() {
         companion object {
             fun newInstance(boolean: Boolean) = MyFragment1().putArgs {
                  putBoolean("booleanKey", boolean)
             }
         }
    }
    

    3) Create your fragments:

    val myFragment = MyFragment.newInstance("NAME")
    val myFragment1 = MyFragment1.newInstance(true)
    
    0 讨论(0)
  • 2020-12-25 12:09

    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)
    
    0 讨论(0)
  • 2020-12-25 12:12

    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)
    
    0 讨论(0)
  • 2020-12-25 12:14

    simple way to call in java ....like this way

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

    }

    0 讨论(0)
提交回复
热议问题