Víc*_*tos 31 android android-architecture-navigation
我一直在关注导航架构组件的文档,以了解这个新导航系统的工作原理.
要从一个屏幕转到另一个屏幕,您需要一个实现NavHost接口的组件.
NavHost是一个空视图,当用户浏览您的应用程序时,目的地会被换入和换出.
但是,似乎目前只有Fragments实现 NavHost
Navigation Architecture Component的默认NavHost实现是NavHostFragment.
所以,我的问题是:
即使我有一个非常简单的屏幕可以实现Activity,为了使用这个新的导航系统,Fragment需要托管包含实际视图?
在不久的将来会Activity实现NavHost接口吗?
- 更新 -
根据ianhanniballake的回答,我了解每个活动都包含自己的导航图.但是,如果我想使用导航组件从一个活动转到另一个活动(替换"旧" startActivity呼叫),我可以使用activity destinations.什么是activity destinations我不清楚,因为迁移的文档没有详细说明:
然后,可以通过向导航图添加活动目标来链接单独的活动,从而在整个代码库中替换startActivity()的现有用法.
ActivityNavigator而不是有什么好处startActivity吗?ian*_*ake 31
导航图仅存在于单个活动中.根据" 迁移到导航"指南,<activity>目标可用于从导航图中启动活动,但是一旦启动第二个活动,它就会与原始导航图完全分开(它可能有自己的图形或只是一个简单的活动).
您可以通过可视化编辑器(通过按+按钮,然后选择项目中的活动)或手动添加XML,将活动目标添加到导航图:
<activity
android:id="@+id/secondActivity"
android:name="com.example.SecondActivity" />
Run Code Online (Sandbox Code Playgroud)
然后,您可以像使用任何其他目标一样使用它来导航到该活动(即,启动活动):
Navigation.findNavController(view).navigate(R.id.secondActivity);
Run Code Online (Sandbox Code Playgroud)
我设法从一个活动导航到另一个活动,而无需使用ActivityNavigator.
ActivityNavigator(this)
.createDestination()
.setIntent(Intent(this, SecondActivity::class.java))
.navigate(null, null)
Run Code Online (Sandbox Code Playgroud)
我还使用 ActivityNavigator 成功地从一个活动导航到另一个活动,而无需托管 Fragment。
科特林:
val activityNavigator = ActivityNavigator( context!!)
activityNavigator.navigate(
activityNavigator.createDestination().setIntent(
Intent(
context!!,
SecondActivity::class.java
)
), null, null, null
)
Run Code Online (Sandbox Code Playgroud)
爪哇:
ActivityNavigator activityNavigator = new ActivityNavigator(this);
activityNavigator.navigate(activityNavigator.createDestination().setIntent(new Intent(this, SecondActivity.class)), null, null, null);
Run Code Online (Sandbox Code Playgroud)
nav_graph.xml
<fragment android:id="@+id/fragment"
android:name="com.codingwithmitch.navigationcomponentsexample.SampleFragment"
android:label="fragment_sample"
tools:layout="@layout/fragment_sample">
<action
android:id="@+id/action_confirmationFragment_to_secondActivity"
app:destination="@id/secondActivity" />
</fragment>
<activity
android:id="@+id/secondActivity"
android:name="com.codingwithmitch.navigationcomponentsexample.SecondActivity"
android:label="activity_second"
tools:layout="@layout/activity_second" />
Run Code Online (Sandbox Code Playgroud)
科特林:
lateinit var navController: NavController
navController = Navigation.findNavController(view)
navController!!.navigate(R.id.action_confirmationFragment_to_secondActivity)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11861 次 |
| 最近记录: |