将Java代码转换为Kotlin以获取由子类Fragment组成的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()
}
}
}
...我尝试将片段的修饰符更改为“object”,甚至将整个类存储在一个伴随对象中,然而该应用程序崩溃时也有相同的例外。
这是我的片段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
...所有这些都说,如何正确声明活动的子类公开静态?
答案 0 :(得分:3)
用Java的说法,默认情况下,Kotlin中的static
中的一个nested默认为public
(默认情况下,所有类都为savedInstanceState
)。这不应该是一个问题。
你因为可空性而得到例外:你应该在onCreatePreferences
中使Bundle?
参数成为可空的null
,因为这个函数可能被框架调用{override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String) {
addPreferencesFromResource(R.xml.settings_main)
}
1}}值,如果此处的类型不可为空,它将在每次崩溃时崩溃。
所以你想要最终得到的是:
import numpy as np
a = [[1,0],[2,3]]
print(np.sum(a,axis=1)) # gives [1,5]
答案 1 :(得分:2)
看起来你的堆栈跟踪是一个空的安全问题。由于您在其他每个与Bundle相关的方法上都允许空值,您是否尝试添加:
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String) {
addPreferencesFromResource(R.xml.settings_main)
}