1
1

More than 1 year has passed since last update.

argumentsを使いactivityからfragmentにオブジェクトを渡す【Android】【kotlin】

Posted at

フラグメントに値を渡すやり方を備忘録として残します。

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を使ったオブジェクト渡しになります。
インテントを使ったものと基本的には同じような流れになると思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1