フラグメントに値を渡すやり方を備忘録として残します。
activityからactivityへの値の受け渡しはintentを使いました
fragmentに値を渡すときにはargumentsというfragmentが持つプロパティをつかいます。
argumentsはBundleという型のプロパティです。
値を渡すにはBundleのインスタンスを作り、BundleにputIntなどで値を渡します。
オブジェクトを渡す方法は、、、
main.Activity内でfragmentクラス、Bundleクラスをインスタンス化する
インスタンス化したbundleにputParceLable(キー, オブジェクト)
fragmentクラス.arguments = bundle
と繋ぐことで対象のfragmentへオブジェクトを渡すことができる。
前提としてデータクラスを使い@Parcelizeを実装してるとする。
main.Activity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//インスタンス
val myNum = MyNum()
//フラグメントを表示させる
numFragment = NumFragment()
val bundle = Bundle()
bundle.putParcelable("NUM", nyNum)
standardFragment.arguments = bundle
supportFragmentManager.beginTransaction().apply {
replace(R.id.container, standardFragment)
commit()
}
}
}
受け取り側
Num.Fragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//本来はgetArgumentsメソッドだがKotlinはargumentsプロパティを使用できる
arguments?.let {
//argumentsに保存したものをbmiBodyに保存する
bmiBody = it.getParcelable<MyNum>("NUM")
}
}
以上でargumentsを使ったオブジェクト渡しになります。
インテントを使ったものと基本的には同じような流れになると思います。