возможно, сначала прочитайте вопрос

ередать и получить значение из фрагмента и активности?

 zsmb1303 окт. 2017 г., 20:46
 faraz khonsari03 окт. 2017 г., 20:37
дублировать вопрос сstackoverflow.com/questions/17436298/...

Ответы на вопрос(7)

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)

агмент с помощью файла -> Новый -> Фрагмент -> Фрагмент (пустой) и отмечаете «включить методы фабрики фрагментов»).

Поместите это в свой фрагмент:

class MyFragment: Fragment {

...

    companion object {

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

.apply хороший трюк для установки данных при создании объекта, или какони заявляют здесь:

Вызывает указанную функцию [блок] сthis значение как его получатель и возвращаетthis стоимость.

Затем в своей деятельности или фрагменте выполните:

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!

простой способ позвонить в 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
        }
}

}

https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects )

Определите свой фрагмент как обычно и объявите компаньона, который действует как статический эквивалент newInstance () в 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
        }
    }
}

И просто назовите это как в Java:

val fragment = ViewStackListFragment.newInstance(4)
 Jorge Casariego05 июн. 2018 г., 18:53
Спасибо! В моем случае это сработало следующим образом: frag.arguments = args

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

Используйте этот кусок кода в вашем второмActivity/Fragment чтобы получить ваши ценности.

var args = getArguments()
var index = args.getInt("Key", 0)
 Hellojeffy28 мар. 2018 г., 23:14
Это должен быть более похожий на котлин код. Это код Java.
 Alex25 апр. 2018 г., 21:24
возможно, сначала прочитайте вопрос

используйте это для отправки аргументов во фрагмент

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)
 lostintranslation07 дек. 2018 г., 18:36
аргументы необязательны, вам нужно использовать аргументы? .getInt (...)
  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)

Ваш ответ на вопрос