在我的项目中,我有以下架构:
在
MainActivity
布局:<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/my_nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/nav_graph"
app:defaultNavHost="true"
/>
</android.support.constraint.ConstraintLayout>
nav_graph
的设计:
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" android:id="@+id/nav_graph"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="com.example.LoginFragment"
android:label="LoginFragment" >
<action
android:id="@+id/loginToContentAction"
app:destination="@id/contentFragment" />
</fragment>
<fragment
android:id="@+id/contentFragment"
android:name="com.example.ContentFragment"
android:label="ContentFragment" />
</navigation>
在
LoginFragment
中,我有以下逻辑:override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if(presenter.isUserLogged()) {
// getNav() returns NavController from the MainActivity
getNav().navigateTo(R.id.loginToContentAction)
return
}
// init login views etc
}
如果手机屏幕处于开启状态,它就能够完美地工作,但是(例如)如果我通过Android Studio部署构建,并且手机屏幕处于关闭状态,则不会导航到ContentFragment
,而是停留在LoginFragment
中。我对情况进行了调试,并且代码进入NavController.navigate(R.id.loginToContentAction)
并步入其中,但实际上它并没有导航。有什么想法可能导致这种情况?