Я пытаюсь реализовать ночной режим в навигационном ящике с помощью переключателя. Но я получаю эту ошибку. Я думаю, что почему-то я 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 указывает на нулевой объект. Я неправильно инициализировал?