kotlinx.android.synthetic returns DialogFragment 中为空
kotlinx.android.synthetic returns null in DialogFragment
在开始之前,我已经阅读了 等措辞相似的帖子,但它们对我不起作用。
正如我在标题中所解释的,当我点击肯定按钮(在本例中为“确定”)时,我得到了一个 NPE。如果有人能指出我做错了什么,那就太好了!下面是我的设置的抽象版本
MainFragment.kt
class MainFragment: DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?) =
AlertDialog.Builder(context!!)
.setView(FragmentMainBinding.inflate(LayoutInflater.from(context)).root)
.setTitle(R.string.title_main)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.ok) { _, _ -> onPositiveButtonTapped() }
.create()
private fun onPositiveButtonTapped() {
val g = arrayListOf(ground_nbr_edit_text.text.toString()) // NullPointerException
// ...
}
}
fragment_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/ground_nbr_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</layout>
DialogFragment 在 onCreateDialog()
之后调用 onCreateView()
,然后将该视图用于对话框的内容,替换您在 onCreateDialog()
中已经设置的任何内容。因此,将您的视图创建移动到 onCreateView()
:
class MainFragment: DialogFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?) =
FragmentMainBinding.inflate(inflater).root
override fun onCreateDialog(savedInstanceState: Bundle?) =
AlertDialog.Builder(context!!)
.setTitle(R.string.title_main)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.ok) { _, _ -> onPositiveButtonTapped() }
.create()
private fun onPositiveButtonTapped() {
val g = arrayListOf(ground_nbr_edit_text.text.toString()) // NullPointerException
// ...
}
}
在开始之前,我已经阅读了
正如我在标题中所解释的,当我点击肯定按钮(在本例中为“确定”)时,我得到了一个 NPE。如果有人能指出我做错了什么,那就太好了!下面是我的设置的抽象版本
MainFragment.kt
class MainFragment: DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?) =
AlertDialog.Builder(context!!)
.setView(FragmentMainBinding.inflate(LayoutInflater.from(context)).root)
.setTitle(R.string.title_main)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.ok) { _, _ -> onPositiveButtonTapped() }
.create()
private fun onPositiveButtonTapped() {
val g = arrayListOf(ground_nbr_edit_text.text.toString()) // NullPointerException
// ...
}
}
fragment_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/ground_nbr_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</layout>
DialogFragment 在 onCreateDialog()
之后调用 onCreateView()
,然后将该视图用于对话框的内容,替换您在 onCreateDialog()
中已经设置的任何内容。因此,将您的视图创建移动到 onCreateView()
:
class MainFragment: DialogFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?) =
FragmentMainBinding.inflate(inflater).root
override fun onCreateDialog(savedInstanceState: Bundle?) =
AlertDialog.Builder(context!!)
.setTitle(R.string.title_main)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.ok) { _, _ -> onPositiveButtonTapped() }
.create()
private fun onPositiveButtonTapped() {
val g = arrayListOf(ground_nbr_edit_text.text.toString()) // NullPointerException
// ...
}
}