如何在 kotlin 中使用片段
How to use fragments with kotlin
我找不到如何使用 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_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.harol.appfinalandroid.MainActivity">
<FrameLayout
android:id="@+id/flLista"
android:layout_width="match_parent"
android:layout_height="match_parent"></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)
我也遇到过这个问题,在我找到它之前它把我逼疯了。
在 onCreateView
中,您需要像这样使 savedInstanceState
可为空:
savedInstanceState: Bundle?
(加问号表示可以为空)
savedInstanceState
可以为空,但您将其声明为 Bundle
- 它应该是 Bundle?
.
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
我找不到如何使用 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_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.harol.appfinalandroid.MainActivity">
<FrameLayout
android:id="@+id/flLista"
android:layout_width="match_parent"
android:layout_height="match_parent"></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)
我也遇到过这个问题,在我找到它之前它把我逼疯了。
在 onCreateView
中,您需要像这样使 savedInstanceState
可为空:
savedInstanceState: Bundle?
(加问号表示可以为空)
savedInstanceState
可以为空,但您将其声明为 Bundle
- 它应该是 Bundle?
.
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {