首页 文章

如何传递和获取片段和活动android kotlin的 Value

提问于
浏览
9

我是kotlin的新手 . 任何人都可以指导我如何传递并从片段和活动中获取 Value

7 回答

  • -1

    用它来发送片段的参数

    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
    }
    

    得到这样的论点

    val args = arguments
    val index = args.getInt("index", 0)
    
  • 2
    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)
    
  • 2

    这是Android Studio提出的解决方案(当您使用文件创建空白片段 - >新建 - >片段 - >片段(空白)并检查“包含片段工厂方法”时) .

    把它放在你的碎片中:

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

    .apply 是在创建对象时设置数据的一个很好的技巧,或者they state here

    使用此值作为其接收器调用指定的函数[block]并返回此值 .

    然后在你的Activity或Fragment中:

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

    并阅读片段中的参数,例如:

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

    享受Kotlin的神奇!

  • 7

    传递并从片段和活动中获取 Value ,

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

    在第二个 Activity / Fragment 中使用这段代码来获取您的值 .

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

    在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 f
            }
    }
    

    }

  • 11

    有伴侣对象(https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects

    像往常一样定义片段,并声明在Java中充当静态newInstance()等效项的伴侣:

    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
            }
        }
    }
    

    简单地在Java中调用它:

    val fragment = ViewStackListFragment.newInstance(4)
    
  • 0

    以更多的Kotlin风格来做

    1)创建内联函数:

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

    2)现在您可以在所有片段中使用此扩展而无需重复代码:

    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)创建你的片段:

    val myFragment = MyFragment.newInstance("NAME")
    val myFragment1 = MyFragment1.newInstance(true)
    

相关问题