Когда я хочу переключиться между темами, приложение вылетает [закрыто]Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Когда я хочу переключиться между темами, приложение вылетает [закрыто]

Сообщение Anonymous »

У меня есть функция toggleTheme(), которая позволяет мне переключаться между темами. Он вызывается в функции onNavigationItemSelected(), но когда я нажимаю «Изменить тему», приложение вылетает.
private fun toggleTheme() {
val currentTheme = AppCompatDelegate.getDefaultNightMode()
val newTheme = if (currentTheme == AppCompatDelegate.MODE_NIGHT_YES) {
AppCompatDelegate.MODE_NIGHT_NO
} else {
AppCompatDelegate.MODE_NIGHT_YES
}
AppCompatDelegate.setDefaultNightMode(newTheme)
saveThemePreference(newTheme)
}

override fun onNavigationItemSelected(item: MenuItem): Boolean {
binding.drawerLayout.addAcronDrawerListener {
when (item.itemId) {
R.id.drawer_item_exit -> presenter.logout()

R.id.switch_light_dark -> toggleTheme()
}
binding.drawerLayout.removeDrawerListener(it)
}
closeDrawer()
return true
}

private fun loadThemePreference() {
val sharedPreferences = getSharedPreferences("app_preferences", MODE_PRIVATE)
val theme = sharedPreferences.getInt("theme_mode", AppCompatDelegate.MODE_NIGHT_NO)
AppCompatDelegate.setDefaultNightMode(theme)
}

override fun onCreate(savedInstanceState: Bundle?) {
Log.i("theme", "1")
App.getApp(applicationContext).componentsHolder
.getComponent(javaClass, MainModule(applicationContext))
.inject(this)
Log.i("theme", "2")

Log.i("theme", "3")

loadThemePreference()

super.onCreate(savedInstanceState)

Log.i("theme", "4")

try {
binding = getDataBindingView(R.layout.activity_main)
} catch (e: Exception) {
Log.e("theme", "${e.message}")
Log.e("theme", "1) $e")
}

Log.i("theme", "5")

try {
navController = Navigation.findNavController(this, R.id.nav_host_fragment)
} catch (e: Exception) {
Log.e("theme", "2) $e")
}

Log.i("theme", "6")

try {
headerBinding = DataBindingUtil.bind(binding.navigationView.getHeaderView(0))!!
} catch (e: Exception) {
Log.e("theme", "3) $e")
}

Log.e("theme", "7")

headerBinding.handler = this
flashlightManager = FlashlightManager(this)
brightnessRegulator = BrightnessRegulator(this)

observeConnectionChanges()
}

Как сделать так, чтобы это приложение не вылетало?
В функции toggleTheme() в конце я написал startActivity(getIntent( )) Finish(), но это не то. Есть ли другие варианты? Если я использую recreate() в приложении, оно также вылетает.
Вот результат в logcat, когда я пытался изменить тему:
FATAL EXCEPTION: main

theme I 1
theme I 2
theme I 3
theme I 4
theme e E Binary XML file line #19 in com.test.app:layout/activity_main: Binary XML file line #19 in com.test.app:layout/activity_main: Error inflating class fragment
theme e 1) android.view.InflateException: Binary XML file line #19 in com.test.app:layout/activity_main: Binary XML file line #19 in com.test.app:layout/activity_main: Error inflating class fragment
theme I 5
theme e 2) java.lang.IllegalArgumentException: ID does not reference a View inside this Activity
theme I 6
theme e 3) kotlin.UninitializedPropertyAccessException: lateinit property binding has not been initialized
theme I 7

Process: com.inspector.app, PID: 30877
java.lang.RuntimeException: Unable to start activity ComponentInfo{com. inspector.app/com. inspector.app.presentation.activity.main.MainActivity}: android.view.InflateException: Binary XML file line #19 in com. inspector.app:layout/activity_main: Binary XML file line #19 in com. inspector.app:layout/activity_main: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3484)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3648)
at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5503)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5409)
at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ClientTransactionHandler.executeTransaction(ClientTransactionHandler.java:58)
at android.app.ActivityThread.handleRelaunchActivityLocally(ActivityThread.java:5462)
at android.app.ActivityThread.access$3500(ActivityThread.java:244)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2126)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7723)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:997)
Caused by: android.view.InflateException: Binary XML file line #19 in com. inspector.app:layout/activity_main: Binary XML file line #19 in com. inspector.app:layout/activity_main: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #19 in com. inspector.app:layout/activity_main: Error inflating class fragment
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property headerBinding has not been initialized
at com. inspector.app.presentation.activity.main.MainActivity.refreshNfcStatus(MainActivity.kt:385)
at com. inspector.app.presentation.activity.main.MainActivity.setNfcStatusHandler(MainActivity.kt:342)
at com. inspector.app.presentation.fragment.notifications.NotificationsViewPagerFragment.onCreateView(NotificationsViewPagerFragment.kt:35)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128)
at androidx.fragment.app.FragmentManager.dispatchViewCreated(FragmentManager.java:3065)
at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:2988)
at androidx.fragment.app.FragmentStateManager.ensureInflatedView(FragmentStateManager.java:392)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:281)
at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:140)
at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135)
at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:319)
at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:298)
at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1082)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:995) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1138)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1099)
at android.view.LayoutInflater.inflate(LayoutInflater.java:680)
at android.view.LayoutInflater.inflate(LayoutInflater.java:532)
at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:699)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:195)
at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:303)
at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:284)
at com. inspector.app.presentation.mvp.BaseActivity.getDataBindingView(BaseActivity.kt:11)
at com. inspector.app.presentation.activity.main.MainActivity.onCreate(MainActivity.kt:139)
at android.app.Activity.performCreate(Activity.java:8004)
at android.app.Activity.performCreate(Activity.java:7988)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3457)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3648)
at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5503)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5409)
at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ClientTransactionHandler.executeTransaction(ClientTransactionHandler.java:58)
at android.app.ActivityThread.handleRelaunchActivityLocally(ActivityThread.java:5462)
at android.app.ActivityThread.access$3500(ActivityThread.java:244)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2126)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7723)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:997)

Но если посмотреть, где возникает ошибка, то вот код:
1) MainActivity.kt:385 override fun refreshNfcStatus() {
if (packageManager.hasSystemFeature(PackageManager.FEATURE_NFC)) {
headerBinding.isNfcEnabled = nfcManager.defaultAdapter.isEnabled //385

for (handler in nfcStatusHandlers)
handler?.handleNfcStatus(nfcManager.defaultAdapter.isEnabled)
}
}
2) MainActivity.kt:342 fun setNfcStatusHandler(nfcStatusHandler: NfcStatusHandler) {
nfcStatusHandlers.add(nfcStatusHandler)
refreshNfcStatus() //342
}
3) MainActivity.kt:139 override fun onCreate(savedInstanceState: Bundle?) {
App.getApp(applicationContext).componentsHolder
.getComponent(javaClass, MainModule(applicationContext))
.inject(this)



Подробнее здесь: https://stackoverflow.com/questions/789 ... pp-crashes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»