android 在Fragment内部使用KotlinViewBinding时出现NullPointerException

ddhy6vgd  于 2023-03-28  发布在  Android
关注(0)|答案(2)|浏览(225)

我尝试使用Kotlinview binding将click listener添加到片段中的按钮。我在onCreateView方法中设置click listener。当我这样做时,由于按钮尚未创建,因此得到了null指针异常。我认为kotlin view binding负责视图初始化,因此按钮不应该为null?
下面是我的代码:

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
0yycz8jy

0yycz8jy1#

因为视图还没有被创建。你应该在onViewCreated()函数中调用视图。

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

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

eit6fx6z2#

kotlinx synthetic在引擎盖下解析start_button如下:

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

getView()返回片段的根视图(如果已设置)。这仅发生在onCreateView()之后。
这就是为什么kotlinx synthetic解析的视图只能在onViewCreated()中使用的原因。

相关问题