Firebase SignOut后未跳转至SignInActivity问题排查
可能的原因及解决方法
1. Toolbar菜单点击事件未关联到Fragment回调
在MyAccountFragment里,你给Toolbar加载了菜单,但没把Toolbar的点击事件绑定到Fragment的onOptionsItemSelected方法。默认情况下,Toolbar的菜单点击会直接传给宿主Activity,而非Fragment,导致你的登出逻辑根本没被触发。
解决方法:
在onCreateView中添加Toolbar的点击监听,手动将事件传递给Fragment:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_my_account, container, false) setHasOptionsMenu(true) val toolbar: Toolbar = view.findViewById(R.id.my_account_toolbar) toolbar.inflateMenu(R.menu.my_account_fragment_menu) // 绑定菜单点击事件到Fragment的回调 toolbar.setOnMenuItemClickListener { onOptionsItemSelected(it) } return view }
2. 重复加载菜单引发冲突
你同时在onCreateView和onCreateOptionsMenu中两次加载同一菜单,这可能导致点击事件分发异常。建议只保留一处菜单加载逻辑。
解决方法:
移除onCreateView中的重复菜单加载代码:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_my_account, container, false) setHasOptionsMenu(true) val toolbar: Toolbar = view.findViewById(R.id.my_account_toolbar) // 移除这行重复的菜单加载代码 // toolbar.inflateMenu(R.menu.my_account_fragment_menu) toolbar.setOnMenuItemClickListener { onOptionsItemSelected(it) } return view }
3. 缺少登出状态验证
当前代码没有验证Firebase登出是否成功,无法确认auth.signOut()是否执行。可以添加日志来确认操作是否触发:
优化建议:
override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == R.id.SignOut) { auth.signOut() // 打印日志确认登出操作执行 Log.d("MyAccountFragment", "登出操作已执行") // 验证当前用户状态 val currentUser = auth.currentUser Log.d("MyAccountFragment", "当前用户状态: ${currentUser?.uid ?: "已登出"}") val intent = Intent(activity, SignInActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK startActivity(intent) activity?.finish() return true } return super.onOptionsItemSelected(item) }
4. 宿主Activity拦截菜单事件
如果HomePageActivity重写了onOptionsItemSelected方法并返回true,会拦截Fragment的菜单点击事件,导致登出逻辑无法执行。检查Activity中是否存在相关拦截代码。
内容的提问来源于stack exchange,提问作者Muhammet Konukcu
相关产品推荐
相关产品推荐

