You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:57:28