---
title: 'PreferenceFragmentCompat'
excerpt: 'Fix Kotlin migration crash: Mark Bundle and rootKey as nullable.'
date: 2019-04-25
categories: android
featureImage: '/images/preferencefragmentcompat.webp'

prev:
  text: 'What is PUP.HighConfidence? (Solution)'
  link: '/blog/what-is-pup-highconfidence-solution'

next:
  text: 'VerifyError (TabLayout & AdMob SDK)'
  link: '/blog/verify-error-tab-layout-admob-sdk'
---

While migrating one of my App 'InSaver!' from `Java` to `Kotlin`, I stumbled upon a strange, like very strange issue.

I had a `SettingsActivity` and a `SettingsFragment` nested in the same `Activity` which
extended `PreferenceFragmentCompat`.

Everything was just fine in `Java` & then just a quick `Convert to Kotlin` took so many hours to get this fixed!

---

So, what was all the ruckus about?\
Well my `SettingsFragment` crashed as soon as it hit the `onCreatePreferences()` method. The only thing that logcat
showed was that the `Bundle` in the constructor i.e. `savedInstanceState` was `null`, weird!

This shouldn't have happened because I used the built-in Refactor to convert Java to Kotlin as this class had nothing
much which needed my manual intervention.

Somewhere on the StackOverflow, I found out that the `Bundle` i.e. the `savedInstanceState` variable is "**NULLABLE**".

The automated refactor somehow 'missed' to put an `?` to `Bundle` object, hence making it `@NonNull` which caused the
crash. If that's happened or is happening to you, just mark the `Bundle` as well as the RootKey as `Nullable` as –

```kotlin
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {}
```