【问题标题】:Different ways to use Fragments使用片段的不同方式
【发布时间】:2020-05-05 12:18:14
【问题描述】:

我正在使用 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
    }
}

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

【问题讨论】:

    标签: android firebase kotlin


    【解决方案1】:

    问题在于,在onViewCreated 中,您正在使用FragmentLoginBinding.inflate(layoutInflater) 创建一个绑定对象,但您没有将该绑定连接到视图,因此您对该对象执行的任何操作都不会对视图产生影响。

    FragmentLoginBinding.inflate(layoutInflater) 创建一个新的绑定对象,并膨胀一个与之连接的新视图。但是您没有在片段中使用该视图,因此使用该方法不是正确的选择。

    所以你可以这样做:

    val binding = FragmentLoginBinding.bind(getView())
    

    如果你真的想要,在onViewCreated 内,这将创建与片段中的视图的绑定。

    也就是说,在onCreateView中创建绑定其实是Android documentation推荐的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      相关资源
      最近更新 更多