【问题标题】:NullPointerException when using Kotlin ViewBinding inside Fragment在 Fragment 中使用 Kotlin ViewBinding 时出现 NullPointerException
【发布时间】:2019-10-05 11:52:32
【问题描述】:

我正在尝试使用 kotlin 视图绑定将点击侦听器添加到我的片段内的按钮。我在 onCreateView 方法中设置点击监听器。当我这样做时,我得到一个空指针异常,因为尚未创建按钮。我认为 kotlin 视图绑定负责视图初始化,所以按钮不应该为空?

这是我的代码:

class FragmentStart : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_start, container, false)
        start_button.setOnClickListener(
            Navigation.createNavigateOnClickListener(R.id.action_fragmentStart_to_fragmentQuestion,null)
        )
        return view
    }
}

这是一个例外:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

【问题讨论】:

  • 您需要在onViewCreated访问

标签: java android kotlin android-viewbinding


【解决方案1】:

因为视图尚未创建。您应该在 onViewCreated () 函数中调用视图。 read more

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

start_button.setOnClickListener(
                Navigation.createNavigateOnClickListener(R.id.action_fragmentStart_to_fragmentQuestion,null)
            )
    }

【讨论】:

    【解决方案2】:

    kotlinx 合成引擎会像这样解析start_button:

    getView()?.findViewById(R.id.start_button)
    

    getView() 返回片段的根视图(如果已设置)。 这只发生在onCreateView()之后。

    这就是为什么 kotlinx 合成解析的视图只能在 onViewCreated() 中使用。

    【讨论】:

    • kotlinx 合成已被弃用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 2021-11-28
    相关资源
    最近更新 更多