首页 > 解决方案 > 在片段中使用 getView().findViewById 会返回 NullPointerException

问题描述

它确实给了我警告,但我从未使用过碎片,所以我不确定如何修复它。我在尝试查找工具栏的代码的第三行出现错误。

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = (View) inflater.inflate(R.layout.fragment_contact, container, false);

        Toolbar toolbar = getView().findViewById(R.id.toolbar);
        ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
        ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayShowTitleEnabled(false);

        TextView textView = getView().findViewById(R.id.vive_unadeca);
        textView.setOnClickListener(new View.OnClickListener() {//do stuff here} });

        LinearLayout mapsT = getView().findViewById(R.id.locationT);
        ImageView mapsI = getView().findViewById(R.id.location);

        mapsT.setOnClickListener(new View.OnClickListener() {//do stuff here} });

        mapsI.setOnClickListener(new View.OnClickListener() {//do stuff here} });

        LinearLayout phoneT = getView().findViewById(R.id.phone_num);
        ImageView phoneI = getView().findViewById(R.id.phone_icon);

        phoneT.setOnClickListener(new View.OnClickListener() {//do stuff here} });

        phoneI.setOnClickListener(new View.OnClickListener() {//do stuff here} });

        LinearLayout emailT = getView().findViewById(R.id.email);
        ImageView emailI = getView().findViewById(R.id.email_icon);

        emailT.setOnClickListener(new View.OnClickListener() {//do stuff here} });

        emailI.setOnClickListener(new View.OnClickListener() {//do stuff here} });

        LinearLayout whatsappT = getView().findViewById(R.id.whatsapp_num);
        ImageView whatsappI = getView().findViewById(R.id.whatsapp_icon);

        whatsappT.setOnClickListener(new View.OnClickListener() {//do stuff here} });

        whatsappI.setOnClickListener(new View.OnClickListener(){//do stuff here} });

        return view;
    }

在 clickListeners 中,我调用了 onCreateView 下面的其他方法,这些方法只调用了诸如打开 gmail、打开 whatsapp、打开电话、谷歌地图和 facebook 之类的意图。

我究竟做错了什么?

标签: android

解决方案


你在getView()里面打电话onCreateView()。到那时,view还没有设置,因为你是对的,然后构建它。

调用将在 after和 before之后getView()返回非空值。 onCreateView()onDestroyView()

相反,只需调用你刚刚膨胀的,我认为这就是你想要的view.findViewByIdView

LinearLayout mapsT = view.findViewById(R.id.locationT);

推荐阅读