Kotlin: Объявление подклассов Activity static

После преобразования кода Java в Kotlin для Activity, состоящего из фрагмента подкласса, макеты больше не будут отображаться должным образом (ошибки logcat в нижней части этого сообщения). Я понял, что объявление подклассов Activity должно быть объявлено публично статическим , и это то, что я получил после преобразования в Kotlin:

class SettingsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_settings) } override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == android.R.id.home) { finish() return true } return super.onOptionsItemSelected(item) } // Apparently the following class must be declared static. class SettingsFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeListener { override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) { addPreferencesFromResource(R.xml.settings_main) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } override fun onDestroy() { super.onDestroy() } } } 

… Я попытался изменить модификатор фрагмента на «объект» и даже сохранил весь класс внутри объекта-компаньона, и все же приложение разбилось с теми же исключениями.

Вот мой фрагмент XML:

 <?xml version="1.0" encoding="utf-8"?> <fragment android:id="@+id/fragment" android:name="com.davenotdavid.dndheadlines.SettingsActivity$SettingsFragment" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> </fragment> 

Исключения выбраны:

 Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class fragment Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState 

… Все это говорит о том, как правильно объявить подклассы активности public static ?

Говоря в языке Java, класс, вложенный в другой, по умолчанию static в Kotlin (и все классы public по умолчанию). Это не должно быть проблемой.

Вы получаете исключение из-за недействительности: вы должны сделать свой параметр onCreatePreferences в onCreatePreferences Bundle? , потому что эта функция может быть вызвана каркасом с null значением, и это приведет к сбою вашего приложения каждый раз, когда он будет, если тип здесь не является нулевым.

Итак, что вы хотите в итоге:

 override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String) { addPreferencesFromResource(R.xml.settings_main) } 

Похоже, это пустая проблема безопасности из вашей трассировки стека. Поскольку вы разрешаете nulls для каждого из других связанных с Bundle методов, вы пытались добавить:

  override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String) { addPreferencesFromResource(R.xml.settings_main) } 
Intereting Posts
Как решить DexArchiveBuilderException для Gradle? Возможно ли издеваться над аксессуарами от Mockito в Котлине? Реализация поиска, который подталкивает результаты к списку, как только они станут доступны, используя rxJava В чем разница между оператором «как» и «есть» в Котлине? Проверьте, является ли класс допустимым значением для KParameter Ошибка или функция: Kotlin позволяет изменить «val» на «var» в наследовании Свойства Kotlin не могут быть переопределены с помощью subinterface Вызывается: rx.exceptions.MissingBackpressureException Почему выражения лямбда ведут себя по-разному для классов Kotlin и Java? Значение anko инициализируется с помощью rxAndroid Ошибка исключения исключения в асинхронном вызове Anko (Kotlin) Можем ли мы представить «self class» в Java (или Kotlin)? KTor или Spark? Какая продукция готова для веб-сервисов Kotlin? Альтернатива перегрузкам функций Карта короткого замыкания Котлина {}. FirstOrNull {}