0

Jetpack でデータを送信するためのより洗練された方法を探している

現在、次のようにデータを渡しています。

override fun onListItemClick(itemIndex: Int, itemCode: String) {
        val bundle = Bundle()
        bundle.putString(KEY_TARGET_GUID, (adapter.getItem(itemIndex) as Target).guid)
        findNavController().navigate(R.id.target_edit, bundle)
    }

そして、次のように別のフラグメントで取得します。

private val targetGuid: String
        get() = arguments?.getString(KEY_TARGET_GUID, "") ?: ""

私はグーグルの人たちがコードラボでそれを行うのを見ましたが、彼の例では彼らはクラスを作成しましたFlowStepFragmentArgs、そしてそれは膨大です

data class FlowStepFragmentArgs(val flowStepNumber: Int = 2) : NavArgs {
    fun toBundle(): Bundle {
        val result = Bundle()
        result.putInt("flowStepNumber", this.flowStepNumber)
        return result
    }

    companion object {
        @JvmStatic
        fun fromBundle(bundle: Bundle): FlowStepFragmentArgs {
            bundle.setClassLoader(FlowStepFragmentArgs::class.java.classLoader)
            val __flowStepNumber : Int
            if (bundle.containsKey("flowStepNumber")) {
                __flowStepNumber = bundle.getInt("flowStepNumber")
            } else {
                __flowStepNumber = 2
            }
            return FlowStepFragmentArgs(__flowStepNumber)
        }
    }
}

Q : 私の場合、どうすれば綺麗にデータを移行できますか

4

2 に答える 2

0

私の知る限り、Jetpack Navigation を使用してデータを渡すには、実際には 2 つのオプションしかありません。

1) バンドルの使用。ここで私はbudnleOf(x to y)機能が本当に便利だと思います

    val targetGuid = adapter.getItem(itemIndex) as Target).guid)
    val bundle = bundleOf(KEY_TARGET_GUID, targetGuid)
    findNavController().navigate(R.id.target_edit, bundle)

2) ナビゲーション グラフ内で目的地の引数を定義する。コードを生成します。R.id.target_editあなたがフラグメントであると仮定します:

<fragment
    android:id="@+id/target_edit"
    android:name="com.example.TargetEditFragment"
    tools:layout="@layout/fragment_target_edit">
    <argument
        android:name="targetGuid"
        android:defaultValue="@null"
        app:argType="com.example.Target"
        app:nullable="true"/>
 </fragment>

次に、あなたのTargetEditFragment

override fun onCreate(savedInstanceState: Bundle?) {
  val targetGuid =
    arguments?.let { TargetEditFragmentArgs.fromBundle(it).targetGuid }
}
于 2019-10-09T15:54:29.063 に答える