Fixed
Status Update
Comments
il...@google.com <il...@google.com>
ap...@google.com <ap...@google.com> #2
If you need to add a custom Navigator but don't want to subclass NavHost (which we expect will be needed in most cases), the correct approach is to add it before you set your graph:
1) Don't use app:navGraph in your XML
2) Get a reference to your NavController
3) Add your Navigator to the NavController
4) Call setGraph on the NavController
This relies on the fact that NavController waits until the graph is set before restoring state / doing anything at all.
Technically, the createFragmentNavigator() call in NavHostFragment is already called at the same time as your proposed onNavControllerCreated() method so as a workaround, you could override that method, add your Navigator, then return super.createFragmentNavigator().
1) Don't use app:navGraph in your XML
2) Get a reference to your NavController
3) Add your Navigator to the NavController
4) Call setGraph on the NavController
This relies on the fact that NavController waits until the graph is set before restoring state / doing anything at all.
Technically, the createFragmentNavigator() call in NavHostFragment is already called at the same time as your proposed onNavControllerCreated() method so as a workaround, you could override that method, add your Navigator, then return super.createFragmentNavigator().
il...@google.com <il...@google.com> #3
The first solution does not work, because after screen rotation, the graph (probably a restored graph) is set when Activity.setContentView() is called.
The workaround with createFragmentNavigator() works, though it's not very elegant. Maybe the method could be renamed to createNavigators() and return a list or an array of Navigators?
Anyway, it is a good enough solution for now, so it is not very urgent.
In conclusion:
* I think that a better support for custom destinations should be provided before final release.
* I would suggest describing the "Add support for new destination types" section in the documentation in more details.
Thank you
The workaround with createFragmentNavigator() works, though it's not very elegant. Maybe the method could be renamed to createNavigators() and return a list or an array of Navigators?
Anyway, it is a good enough solution for now, so it is not very urgent.
In conclusion:
* I think that a better support for custom destinations should be provided before final release.
* I would suggest describing the "Add support for new destination types" section in the documentation in more details.
Thank you
Description
Version used: 1.0.6-alpha
Previous version without bug: 1.0.4-alpha
Devices/Android versions reproduced on: Samsung Galaxy Edge 7, Android 8.0.0
Navigation doesn't take into account
app:enterAnim
app:exitAnim
that are set for action to activity:
<navigation>
<fragment android:id="@+id/mainFragment">
<action
android:id="@+id/action_mainFragment_to_activity2"
app:destination="@id/activity2"
app:enterAnim="@anim/view_slide_bottom_in"
app:exitAnim="@anim/no_animation"/>
</fragment>
<activity android:id="@+id/activity2"/>
<navigation/>
This doesn't work:
NavHostFragment.findNavController(this).navigate(R.id.action_mainFragment_to_activity2)
But if I set directly with ActivityOptions it works:
NavHostFragment.findNavController(this)
.navigate(R.id.action_mainFragment_to_activity2, null, null,
ActivityNavigator.Extras(
ActivityOptionsCompat.makeCustomAnimation(activity!!, R.anim.view_slide_bottom_in, R.anim.no_animation)))
Example project to reproduce issue
It is expected to work the same.