Android 片段中的条件导航只触发一次
我的大部分和/或所有安卓开发知识都来自谷歌的Udacity课程,关于使用Kotlin开发安卓应用程序,我遇到了一个问题,我的条件导航只触发一次,任何进一步的触发都会将应用程序锁定在一个循环中 希望这里有足够的信息来避免XY问题。它也可能太冗长了,因为我正试图用橡皮筋将鼠标插入文本框,看看是否能注意到任何明显的问题 该应用程序是一个单一的活动应用程序,它使用android架构组件、数据绑定和导航库。它也使用Android AWS SDK,但我认为这与问题无关 按照谷歌的导航原则,固定起点的目的地是 而不是登录屏幕Android 片段中的条件导航只触发一次,android,kotlin,mvvm,Android,Kotlin,Mvvm,我的大部分和/或所有安卓开发知识都来自谷歌的Udacity课程,关于使用Kotlin开发安卓应用程序,我遇到了一个问题,我的条件导航只触发一次,任何进一步的触发都会将应用程序锁定在一个循环中 希望这里有足够的信息来避免XY问题。它也可能太冗长了,因为我正试图用橡皮筋将鼠标插入文本框,看看是否能注意到任何明显的问题 该应用程序是一个单一的活动应用程序,它使用android架构组件、数据绑定和导航库。它也使用Android AWS SDK,但我认为这与问题无关 按照谷歌的导航原则,固定起点的目的地是
2019-07-03 15:43:40.417 I/ExampleApplication$onCreate: Inside init function onResult: SIGNED_IN
2019-07-03 15:43:40.438 I/HomeScreenFragment: Viewmodel in oncreate
2019-07-03 15:43:40.447 I/HomeScreenViewModel: Startup isSignedIn state: true
2019-07-03 15:43:40.485 I/HomeScreenFragment$onCreateView: ifTrue isSignedIn
2019-07-03 15:43:40.650 I/HomeScreenFragment: Homescreen fragment onResume
2019-07-03 15:43:40.835 I/OpenGLRenderer: Initialized EGL, version 1.4
2019-07-03 15:43:40.835 W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
2019-07-03 15:43:45.086 I/HomeScreenViewModel: Trying to logout now..
2019-07-03 15:43:45.115 I/HomeScreenFragment$onCreateView: Else isSignedIn
2019-07-03 15:43:45.676 I/HomeScreenFragment: Homescreen fragment onPause
2019-07-03 15:43:45.676 I/HomeScreenFragment: Homescreen fragment onStop
2019-07-03 15:43:45.758 I/art: Do partial code cache collection, code=27KB, data=29KB
2019-07-03 15:43:45.759 I/art: After code cache collection, code=24KB, data=28KB
2019-07-03 15:43:45.759 I/art: Increasing code cache capacity to 128KB
登录屏幕取决于登录状态
从一个虚假的事实来看
应用程序类
AWSMobileClient在类扩展应用程序中初始化
AWSMobileClient.getInstance().initialize(applicationContext, object : Callback<UserStateDetails> {
override fun onResult(userStateDetails: UserStateDetails) {
Timber.i("Inside init function onResult: %s", userStateDetails.userState)
}
override fun onError(e: Exception) {
Timber.e(e, "Initialization error.")
}
}
)
应用程序的干净安装
Logcat
2019-07-03 15:30:38.727 I/AWSKeyValueStore: Creating the AWSKeyValueStore with key for sharedPreferences = CognitoIdentityProviderCache
2019-07-03 15:30:38.752 I/ExampleApplication$onCreate: Inside init function onResult: SIGNED_OUT
2019-07-03 15:30:38.759 I/HomeScreenFragment: Viewmodel in oncreate
2019-07-03 15:30:38.759 I/HomeScreenViewModel: Startup isSignedIn state: false
2019-07-03 15:30:38.778 I/HomeScreenFragment$onCreateView: Else isSignedIn
2019-07-03 15:30:39.182 I/HomeScreenFragment: Homescreen fragment onStop
此时,应用程序位于登录屏幕上,一切正常
它
-启动到主屏幕片段
-检查了我的登录状态,发现我没有登录
-将我导航到登录屏幕
2019-07-03 15:43:40.417 I/ExampleApplication$onCreate: Inside init function onResult: SIGNED_IN
2019-07-03 15:43:40.438 I/HomeScreenFragment: Viewmodel in oncreate
2019-07-03 15:43:40.447 I/HomeScreenViewModel: Startup isSignedIn state: true
2019-07-03 15:43:40.485 I/HomeScreenFragment$onCreateView: ifTrue isSignedIn
2019-07-03 15:43:40.650 I/HomeScreenFragment: Homescreen fragment onResume
2019-07-03 15:43:40.835 I/OpenGLRenderer: Initialized EGL, version 1.4
2019-07-03 15:43:40.835 W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
2019-07-03 15:43:45.086 I/HomeScreenViewModel: Trying to logout now..
2019-07-03 15:43:45.115 I/HomeScreenFragment$onCreateView: Else isSignedIn
2019-07-03 15:43:45.676 I/HomeScreenFragment: Homescreen fragment onPause
2019-07-03 15:43:45.676 I/HomeScreenFragment: Homescreen fragment onStop
2019-07-03 15:43:45.758 I/art: Do partial code cache collection, code=27KB, data=29KB
2019-07-03 15:43:45.759 I/art: After code cache collection, code=24KB, data=28KB
2019-07-03 15:43:45.759 I/art: Increasing code cache capacity to 128KB
登录后的Logcat
2019-07-03 15:33:39.605 I/LoginViewModel$signIn: Sign-in callback state: DONE
2019-07-03 15:33:39.605 I/LoginViewModel$signIn: Sign-in done.
2019-07-03 15:33:39.611 I/HomeScreenFragment: Viewmodel in oncreate
2019-07-03 15:33:39.618 I/HomeScreenViewModel: Startup isSignedIn state: true
2019-07-03 15:33:39.626 I/HomeScreenFragment$onCreateView: ifTrue isSignedIn
2019-07-03 15:33:39.628 I/HomeScreenFragment: Homescreen fragment onResume
2019-07-03 15:33:39.635 I/HomeScreenViewModel: Viewmodel onCleared
2019-07-03 15:33:39.635 I/HomeScreenFragment: Homescreen fragment onDestroy
我成功登录,被导航回主屏幕,我的登录状态被检查,
当我登录时,它从api获取数据,并以
回收站
我不知道为什么片段/视图模型被清除/销毁。碎片是
仍然在屏幕上,可以与之交互
当我点击主屏幕片段上的注销按钮时,将从viewmodel调用注销功能
在这一点上,应用程序锁定,我的日志是这样的,重复到无限远
2019-07-03 15:40:39.756 I/HomeScreenViewModel: Trying to logout now..
2019-07-03 15:40:39.779 I/HomeScreenFragment$onCreateView: Else isSignedIn
2019-07-03 15:40:39.834 I/HomeScreenFragment: Homescreen fragment onPause
2019-07-03 15:40:39.835 I/HomeScreenFragment: Homescreen fragment onStop
2019-07-03 15:40:39.837 I/HomeScreenFragment: Viewmodel in oncreate
2019-07-03 15:40:39.838 I/HomeScreenViewModel: Startup isSignedIn state: false
2019-07-03 15:40:39.840 I/HomeScreenFragment$onCreateView: Else isSignedIn
2019-07-03 15:40:39.840 I/HomeScreenFragment: Homescreen fragment onResume
2019-07-03 15:40:39.840 I/HomeScreenViewModel: Viewmodel onCleared
2019-07-03 15:40:39.841 I/HomeScreenFragment: Homescreen fragment onDestroy
如果我关闭应用程序并重新启动它,它会像预期的那样弹出到登录屏幕
在我已登录时启动应用程序
如果我启动应用程序并已登录,我将停留在主屏幕片段。
当我单击注销按钮时,我已注销并导航到登录屏幕
2019-07-03 15:43:40.417 I/ExampleApplication$onCreate: Inside init function onResult: SIGNED_IN
2019-07-03 15:43:40.438 I/HomeScreenFragment: Viewmodel in oncreate
2019-07-03 15:43:40.447 I/HomeScreenViewModel: Startup isSignedIn state: true
2019-07-03 15:43:40.485 I/HomeScreenFragment$onCreateView: ifTrue isSignedIn
2019-07-03 15:43:40.650 I/HomeScreenFragment: Homescreen fragment onResume
2019-07-03 15:43:40.835 I/OpenGLRenderer: Initialized EGL, version 1.4
2019-07-03 15:43:40.835 W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
2019-07-03 15:43:45.086 I/HomeScreenViewModel: Trying to logout now..
2019-07-03 15:43:45.115 I/HomeScreenFragment$onCreateView: Else isSignedIn
2019-07-03 15:43:45.676 I/HomeScreenFragment: Homescreen fragment onPause
2019-07-03 15:43:45.676 I/HomeScreenFragment: Homescreen fragment onStop
2019-07-03 15:43:45.758 I/art: Do partial code cache collection, code=27KB, data=29KB
2019-07-03 15:43:45.759 I/art: After code cache collection, code=24KB, data=28KB
2019-07-03 15:43:45.759 I/art: Increasing code cache capacity to 128KB
我可以在这一点上登录,并被正确导航回主屏幕。
单击“注销”按钮将锁定应用程序,直到它被终止并重新启动
所以在我看来,只要这是观察者第一次看到符号值为假,
它将正确引导我进入登录屏幕并返回。但如果是第二次,,
应用程序锁定
编辑:
请求的方法
override fun onPause() {
super.onPause()
Timber.i("Homescreen fragment onPause")
}
override fun onStop() {
super.onStop()
Timber.i("Homescreen fragment onStop")
}
override fun onResume() {
super.onResume()
Timber.i("Homescreen fragment onResume")
}
override fun onDestroy() {
super.onDestroy()
Timber.i("Homescreen fragment onDestroy")
}
能否添加主屏幕上的恢复/启动代码各种生命周期调用中唯一的内容是说明调用它们的日志消息。能否添加主屏幕上的恢复/启动代码各种生命周期调用中唯一的内容是说明调用它们的日志消息。