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)
这是这样做的好方法吗?或者我应该以不同的方式导航?
您无需定义第二个活动,只需将第二个导航图添加到您的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)