如何在 kotlin 中使用片段

Posted

技术标签:

【中文标题】如何在 kotlin 中使用片段【英文标题】:How to use fragments with kotlin 【发布时间】:2017-11-22 01:48:46 【问题描述】:

我找不到如何使用 kotlin 使用片段。 我在 onCreateView 方法中遇到错误,请帮助我。

ListaFragment.kt:

class ListaFragment : Fragment() 

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle): View? 
    val view = inflater.inflate(R.layout.fragment_lista, container, false)

    return view


fragment_lista.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_
    android:layout_
    android:gravity="center">

    <TextView
        android:layout_
        android:layout_
        android:textAlignment="center"
        android:text="Hello"/>
</LinearLayout>

MainActivity.kt:

class MainActivity : AppCompatActivity() 

    private var listaFragment: ListaFragment? = null
    override fun onCreate(savedState: Bundle?) 
        super.onCreate(savedState) //cual es la diferencia con savedInstanceState
        setContentView(R.layout.activity_main)

        listaFragment = Fragment.instantiate(this@MainActivity,
                ListaFragment::class.java!!.getName()) as ListaFragment

        fragmentManager.beginTransaction().replace(R.id.flLista, listaFragment).commit()
    

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:orientation="vertical"
    tools:context="com.example.harol.appfinalandroid.MainActivity">

    <FrameLayout
        android:id="@+id/flLista"
        android:layout_
        android:layout_></FrameLayout>

</LinearLayout>

我没有语法错误,当我打开片段时应用程序停止

错误:

Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState
                                                                                     at com.example.harol.appfinalandroid.ListaFragment.onCreateView(ListaFragment.kt:0)

【问题讨论】:

【参考方案1】:

savedInstanceState 可以为空,但您将其声明为 Bundle - 它应该是 Bundle?

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?): View? 

【讨论】:

【参考方案2】:

我也遇到过这个问题,直到我发现它才让我发疯。

onCreateView 中,您需要像这样使savedInstanceState 可以为空:

savedInstanceState: Bundle?(加问号表示可以为空)

【讨论】:

以上是关于如何在 kotlin 中使用片段的主要内容,如果未能解决你的问题,请参考以下文章

Android 上的 Kotlin:如何在片段中使用数据库中的 LiveData?

如何在kotlin的片段内显示网格视图?

Kotlin - 如何将空值传递给片段 newInstance 方法?

如何在kotlin中从一个片段转到另一个片段?

如何在片段 kotlin 中编写 onBackPressed()

kotlin:如何在两个片段之间传递数据