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
相关产品推荐
相关产品推荐

