Kotlin中的Android应用程序未正确填充碎片布局

时间:2018-01-25 21:56:55

标签: android kotlin

我有一个问题。

我写了一个Java Android App并转换为Kotlin。它工作在Java jsut很好,但现在当我运行应用程序时,它给了我一个RuntimeError。碎片不能膨胀:

错误

FATAL EXCEPTION: main
Process: com.jaielsoft.www.emergencyapp, PID: 10753
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jaielsoft.www.emergencyapp/de.htw_berlin.f4.ai.aa.activities.MainActivity}: android.view.InflateException: Binary XML file line #0: Error inflating class fragment
    ...
Caused by: android.view.InflateException: Binary XML file line #0: Error inflating class fragment
    ....
Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState    
    ....

以下是涉及的类和布局文件:

MainActivity.kt:

package de.htw_berlin.f4.ai.aa.activities

...

class MainActivity : FragmentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (savedInstanceState == null)
            this.setContentView(R.layout.mainlayout)
    }
}

mainlayout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<fragment
    android:name="de.htw_berlin.f4.ai.aa.fragments.MainFragment"
    android:id="@+id/main_menu_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</RelativeLayout>

MainFragment.kt

package de.htw_berlin.f4.ai.aa.fragments

...

class MainFragment : Fragment() {
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle): View? {
        return inflater.inflate(R.layout.mainfragmentlayout, container, false)
    }

}

mainfragmentlayout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:scaleType="centerCrop"
        android:src="@drawable/blue"
        android:contentDescription="@null" />

    <ImageButton
        android:id="@+id/sosButton"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_above="@+id/contactsButton"
        android:layout_alignStart="@+id/contactsButton"
        android:onClick="callForHelp"
        android:layout_marginBottom="98dp"
        android:background="@null"
        android:scaleType="centerCrop"
        android:src="@drawable/emergencybutton"
        android:contentDescription="@null"/>

    <ImageButton
        android:id="@+id/contactsButton"
        android:layout_width="300dp"
        android:layout_height="100dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="57dp"
        android:background="@null"
        android:onClick="startContactActivity"
        android:scaleType="centerCrop"
        android:src="@drawable/contactsbutton"
        android:contentDescription="@null" />

<ImageButton
        android:id="@+id/mapButton"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentTop="true"
        android:layout_marginEnd="23dp"
        android:layout_marginTop="20dp"
        android:onClick="startMapActivity"
        android:background="@null"
        android:scaleType="centerCrop"
        android:src="@drawable/mapbutton"
        android:contentDescription="@null"/>

</RelativeLayout>

问题出在哪里?你能帮我吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

更改savedInstanceState

的这一行
Bundle?

Bundle

请注意,我使用onCreateView代替savedInstanceState {{1}}为空。 当从Kotlin中的Java类重写方法时,这通常是一个问题,有时您不确切地知道参数是否可以为null。 在这种情况下,{{1}}可以(并且将会)调用{{1}}为空,因此您可以使其可为空。