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

Kotlin Fragment内按钮需点击两次才跳转Activity,如何实现单次点击跳转?

问题修复方案

核心原因

你对按钮设置了两层嵌套的点击监听器:

  • 在onCreateView阶段已经给按钮绑定了OnClickListener指向当前Fragment实现的接口
  • 首次点击触发onClick回调时,你又给按钮重新设置了一层带跳转逻辑的点击监听器,本次点击不会执行跳转
  • 第二次点击才会触发新设置的监听器执行跳转,因此出现需要点击两次的问题

修改方法

直接移除onClick方法内部的setOnClickListener嵌套逻辑,直接在when分支内写跳转代码即可,修改后的完整代码如下:

class FragmentSetting : Fragment(), View.OnClickListener {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view: View = inflater.inflate(R.layout.fragment_main_setting, container, false)
        val btnLogout: Button = view.findViewById(R.id.btn_logout)
        val btnArticle: Button = view.findViewById(R.id.btn_art)
        btnLogout.setOnClickListener(this)
        btnArticle.setOnClickListener(this)
        return view
    }

    companion object {
        fun newInstance(): FragmentSetting {
            return FragmentSetting()
        }
    }

    override fun onClick(v: View?) {
        when (v?.id) {
            R.id.btn_logout -> {
                Toast.makeText(context, "Signed Out.", Toast.LENGTH_SHORT).show()
                FirebaseAuth.getInstance().signOut()
                val intent = Intent(activity, SignInActivity::class.java)
                startActivity(intent)
            }
            R.id.btn_art -> {
                Toast.makeText(context, "Hello World", Toast.LENGTH_SHORT).show()
                val intent = Intent(activity, ArticleActivity::class.java)
                startActivity(intent)
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者engr_rj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:03