使用导航组件在不同图形之间导航

SNM*_*SNM 10 navigation android kotlin android-architecture-navigation

我有两个活动,一个包含登录过程的所有片段,另一个包含主应用程序的所有片段。

假设我想从 Activity1(包含登录的所有导航图)导航到 Activity2(包含主应用程序的所有导航图)

  class LoginActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_login)
        }
    
        fun goToMainActivity(){
            startActivity(Intent(this,MainActivity::class.java))
            finish()
        }
    }
Run Code Online (Sandbox Code Playgroud)

这里我调用方法 goToMainActivity()

 class LoginFragment : Fragment() {
    
        override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            return inflater.inflate(R.layout.fragment_login,container,false)
        }
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
    
            btn_go.setOnClickListener {
                // call the method goToMainActivity() to kill all fragments contained by that Activity and move foward to MainActivity with another nav_graph
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

由于 LoginActivity 拥有一个 nav_graph 并且是所有登录片段的导航主机,现在我想杀死包含在 LoginActivity 中的所有片段并转向一个包含不同导航图的新活动(MainActivity)

这是这样做的好方法吗?或者我应该以不同的方式导航?

Nic*_*zzi 5

您无需定义第二个活动,只需将第二个导航图添加到您的nav_graph.xml文件中即可。就像是:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools" android:id="@+id/nav_graph"
            app:startDestination="@id/loginFragment">

    <fragment
            android:id="@+id/loginFragment"
            android:name="com.mycompany.loginFragment"
            tools:layout="@layout/fragment_login"
            android:label="Login" >
         <action
                android:id="@+id/action_loginFragment_to_new_graph"
                app:destination="@id/new_graph" />
    </fragment>

    <include app:graph="@navigation/new_graph" />
</navigation>
Run Code Online (Sandbox Code Playgroud)

然后,使用您的navController, 导航操作:

navController.navigate(R.id.action_loginFragment_to_new_graph)
Run Code Online (Sandbox Code Playgroud)

  • 有什么方法可以转到新图表中的片段而不是 startDestination 吗? (3认同)
  • 但第二个导航图意味着第二个导航活动,对吧? (2认同)
  • @Emiliano Schiavone 如果您的意思是特定片段,您可以将目标片段添加到当前图表中。相同的片段可以保留在具有不同导航操作的不同图表中。 (2认同)