gpt4 book ai didi

android - 使用 fragment 的不同方式

转载 作者:行者123 更新时间:2023-12-02 12:51:17 25 4
gpt4 key购买 nike

我正在使用 Firebase 开发一个应用程序。但每当我使用 onViewCreated方法,按钮不响应任何点击。但是当我使用 onCreateView , 有用。

这是我的 LoginFragment (按钮不响应点击):

class LoginFragment : Fragment(R.layout.fragment_login) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val binding = FragmentLoginBinding.inflate(layoutInflater)
binding.buttonGoogleSignin.setOnClickListener {
toast("THIS IS NOT WORKING")
Authentication.getInstance().signIn(context!!, getString(R.string.default_web_client_id)) {
startActivityForResult(mGoogleClient.signInIntent, RC_GOOGLE_SIGN_IN)
}
}
}
}

在这段代码中,我的按钮响应点击:
class LoginFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInFlater,
container: ViewGroup?,
savedInstanceState: Bundle?
) {
val view = inflater.inflate(R.layout.fragment_login, container, false)
val binding = FragmentLoginBinding.bind(view)
binding.buttonGoogleSignin.setOnClickListener {
toast("THIS IS WORKING")
Authentication.getInstance().signIn(context!!, getString(R.string.default_web_client_id)) {
startActivityForResult(mGoogleClient.signInIntent, RC_GOOGLE_SIGN_IN)
}
}
return view
}
}

有人可以向我解释为什么第一种方法不起作用吗?

最佳答案

问题在于 onViewCreated您正在使用 FragmentLoginBinding.inflate(layoutInflater) 创建绑定(bind)对象但是您没有将该绑定(bind)连接到 View ,因此无论您对该对象做什么都不会对 View 产生影响。
FragmentLoginBinding.inflate(layoutInflater)创建一个新的绑定(bind)对象并膨胀一个与之连接的新 View 。但是您没有在 fragment 中使用该 View ,因此使用该方法不是正确的选择。

因此,您可以执行以下操作:

val binding = FragmentLoginBinding.bind(getView())

里面 onViewCreated如果您真的想要,这将创建与您在 fragment 中拥有的 View 的绑定(bind)。

就是说,已经在 onCreateView 中创建绑定(bind)实际上是 Android documentation推荐的.

关于android - 使用 fragment 的不同方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61612962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com