Ошибка ссылки на нулевой объект SwitchCompat в панели навигации - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь реализовать ночной режим в навигационном ящике с помощью переключателя. Но я получаю эту ошибку. Я думаю, что почему-то я SwitchCompat не инициализируется правильно. Но я не могу понять, что случилось. Мне нужна помощь по этому поводу.

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

Вот моя активность oncreate ()

@Override
    protected void onCreate(Bundle savedInstanceState) {
        if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
            setTheme(R.style.app_dark_theme);
        } else {
            setTheme(R.style.app_theme);
        }
        super.onCreate(savedInstanceState);
        setContentView(R.layout.screen_main);

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        drawer = findViewById(R.id.draw_layout);

        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        this.toolBar = new ToolBar(findViewById(R.id.folderName));
        this.buttonBar = new ButtonBar(findViewById(R.id.buttonBar), fragments);

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
                R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        toggleSwitch = findViewById(R.id.night_mode_switch);
        toggleSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
            if(isChecked){
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                restartActivity();
            }else{
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
            }
        });

        String[] storages = storages();

        if (storages.length > 1) {
            storageFragment = StorageFragment.newInstance(storages);

            FragmentManager fragmentManager = getSupportFragmentManager();

            FragmentTransaction transaction = fragmentManager.beginTransaction();
            transaction.add(R.id.fragmentContainer, storageFragment);
            transaction.addToBackStack(null);
            transaction.commitAllowingStateLoss();

            toolBar.update(getString(R.string.app_name));
        } else {
            String root = Environment.getExternalStorageDirectory().getAbsolutePath();
            FolderFragment folderFragment = FolderFragment.newInstance(root);

            addFragment(folderFragment, false);
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_WRITE_EXTERNAL_STORAGE);
            }
        }


    }

Вот мое меню переключения

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <androidx.appcompat.widget.SwitchCompat
        android:id="@+id/night_mode_switch"
        android:layout_width="fill_parent"
        app:showText="false"
        android:layout_height="match_parent"
        android:text=""/>
</LinearLayout>

Я не могу понять что вызывает ошибку. Может ли кто-нибудь сказать мне, почему SwitchCompat указывает на нулевой объект. Я неправильно инициализировал?

...