Start Destination のときは, Up は使えない (❸で⽰した原則) • 他のアプリのタスクとして起動したとき Back は他のアプリに 戻り, Up は⾃⾝のアプリの前の画⾯に戻る 参考: Reverse Navigation - https://material.io/design/navigation/understanding-navigation.html#reverse-navigation Up と Back は同じ動作をする デザイン原則❹
: NavArgs { fun toBundle(): Bundle { val result = Bundle() result.putString("userId", this.userId) return result } companion object { @JvmStatic fun fromBundle(bundle: Bundle): UserDetailFragmentArgs { bundle.setClassLoader(UserDetailFragmentArgs::class.java.classLoader) val __userId : String? if (bundle.containsKey("userId")) { __userId = bundle.getString("userId") if (__userId == null) { throw IllegalArgumentException("Argument \"userId\" is marked as non-null but } } else { throw IllegalArgumentException("Required argument \"userId\" is missing and does } return UserDetailFragmentArgs(__userId) } }
{ try { Class<?> clazz = sClassMap.get(fname); if (clazz == null) { // Class not found in the cache, see if it's real, and try to add it clazz = context.getClassLoader().loadClass(fname); if (!Fragment.class.isAssignableFrom(clazz)) { throw new InstantiationException("Trying to instantiate a class " + fname + " that is not a Fragment", new ClassCastException()); } sClassMap.put(fname, clazz); } Fragment f = (Fragment) clazz.getConstructor().newInstance(); if (args != null) { args.setClassLoader(f.getClass().getClassLoader()); f.setArguments(args); } return f; } catch (ClassNotFoundException e) { リフレクションによってFragmentのインスタンスを⽣成 実⾏時には各モジュールがマージされているため参照可能 ⽣成されたクラスを使って遷移するとき