【发布时间】:2017-06-30 15:40:14
【问题描述】:
在将包含子类 Fragment 的 Activity 的 Java 代码转换为 Kotlin 后,布局将无法再正确呈现(logcat 错误位于本文底部)。我想是因为声明 Activity 的子类必须声明为 publicly static,这就是我在转换为 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
...说了这么多,我该如何正确地声明一个Activity的子类public static?
【问题讨论】:
标签: android android-studio static kotlin subclass