在空对象上调用 findViewById。哪个不为空

Invoking findViewById on a null object. Which isn't null

所以我有一个设置片段,其中包含设置。

在第 22 行,我有一个查找文本视图的查找视图。直到今天它都创造了奇迹(没有改变任何事情)。现在我想它也会使其余的发现失败,但由于它在这个发现上崩溃了,我们永远不会知道。

这是为什么?

XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#a8a4a1"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:text="ACCOUNT"
        android:textColor="#2b2a29"
        android:textSize="15dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/SettingsFragmentAccountSettings"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:text="Account Settings"
        android:textColor="#2b2a29"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView3" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:background="#a8a4a1"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:text="THEME"
        android:textColor="@color/black"
        android:textSize="15dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/SettingsFragmentAccountSettings" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:text="Dark Mode"
        android:textColor="@color/black"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView4" />

    <Switch
        android:id="@+id/SettingsFragmentDarkModeSwitch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="52dp"
        android:scaleX="1.25"
        android:scaleY="1.25"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.94"
        app:layout_constraintStart_toEndOf="@+id/textView2"
        app:layout_constraintTop_toBottomOf="@+id/SettingsFragmentAccountSettings" />

    <TextView
        android:id="@+id/r"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:background="#a8a4a1"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:text="OTHER"
        android:textColor="@color/black"
        android:textSize="15dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/SettingsFragmentDarkModeSwitch" />
    <TextView
        android:id="@+id/SettingsFragmentFAQ"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:text="FAQ"
        android:textColor="@color/black"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/r" />
    <TextView
        android:id="@+id/SettingsFragmentSupport"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:text="Support"
        android:textColor="@color/black"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/SettingsFragmentFAQ" />
    <TextView
        android:id="@+id/SettingsFragmentPolicy"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:text="Content Policy &amp; EULA"
        android:textColor="@color/black"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/SettingsFragmentSupport" />
    <TextView
        android:id="@+id/SettingsFragmentUSerAgreement"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:text="User Agreement"
        android:textColor="@color/black"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/SettingsFragmentPolicy" />
    <TextView
        android:id="@+id/SettingsFragmentBugReport"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:text="Report A Bug"
        android:textColor="@color/black"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/SettingsFragmentUSerAgreement" />
    <TextView
        android:id="@+id/Build"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:background="#a8a4a1"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:text="BUILD INFORMATION"
        android:textColor="@color/black"
        android:textSize="15dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/SettingsFragmentBugReport" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:text="1.0.0"
        android:textSize="15dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.042"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/Build" />

</androidx.constraintlayout.widget.ConstraintLayout>

片段代码:

package com.example.create4me;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class Settings extends Fragment {
    TextView accSettings, FAQ, BugReport, Policy, UserAgg, Support;
    Switch darkModeSwitch;
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState){
        accSettings = (TextView) getView().findViewById(R.id.SettingsFragmentAccountSettings);  <--- This one
        FAQ = (TextView) getView().findViewById(R.id.SettingsFragmentFAQ);
        BugReport = (TextView) getView().findViewById(R.id.SettingsFragmentBugReport);
        Policy = (TextView) getView().findViewById(R.id.SettingsFragmentPolicy);
        UserAgg = (TextView) getView().findViewById(R.id.SettingsFragmentUSerAgreement);
        Support = (TextView) getView().findViewById(R.id.SettingsFragmentSupport);
        darkModeSwitch = (Switch) getView().findViewById(R.id.SettingsFragmentDarkModeSwitch);
        accSettings.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getContext(), AccountSettings.class);
                startActivity(intent);
            }
        });
        BugReport.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getContext(), BugReport.class);
                startActivity(intent);
            }
        });
        FAQ.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDiag();
            }
        });
        Policy.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDiag();
            }
        });
        UserAgg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDiag();
            }
        });
        Support.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDiag();
            }
        });

        darkModeSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                /*
                In here, put 0 into MySqli DB if the isChecked value = False.
                Put 1 into MySqli DB if the isChecked value = 1.
                 */
            }
        });
        return inflater.inflate(R.layout.settings, container, false);
    }
    void alertDiag(){
        new AlertDialog.Builder(getContext())
                .setTitle("Well here we are")
                .setMessage("Normally, the user by now would've gone into a website explaining the content of the pressed TextView.\n"
                + "Since we do not have a website or a domain, we show this AlertDialog. Sorry for the turnout!")
                .setNegativeButton(android.R.string.no, null)
                .show();
    }
}

你需要在onCreateView的第一行做:

View view = inflater.inflate(R.layout.settings, container, false);

然后为每个 findViewById 做:

view.findViewById(R.id.your_view);

您是最后而不是第一个给视图充气。

然后在 onCreateView() 结束时:

return view;

请尝试以下方式在您的 oncreateview

中初始化和 return
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState){
    
      View view =  inflater.inflate(R.layout.settings, container, false);
    
    //Init all here like 
    accSettings = (TextView) view. findViewById(R.id.SettingsFragmentAccountSettings)
    
      //and then return like
      return view;
    }

希望对您有所帮助