我有一个Android Kotlin应用程序片段,在资源布局中包含三个元素:
<EditText android:id="@+id/forename_input_account"/>
<EditText android:id="@+id/surname_input_account"/>
<Button android:id="@+id/saveButton"/>
单击“保存”后,我需要两个EditText字段的内容写入项目Firebase Realtime DB。
在帐户片段文件中,我有以下内容:
class AccountFragment : Fragment() {
lateinit var forename_input_account: EditText
lateinit var surname_input_account: EditText
lateinit var saveButton: Button
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
forename_input_account = forename_input_account
surname_input_account = surname_input_account
saveButton = saveButton
saveButton.setOnClickListener {
saveAccount()
}
}
private fun saveAccount(){
val firstname = forename_input_account.text.toString().trim()
val lastname = lastname_input_account.text.toString().trim()
val ref = FirebaseDatabase.getInstance().getReference("mySaveLocation")
val saveId = ref.push().key
val myRecord = save(saveId, firstname, lastname)
ref.child(saveId.toString()).setValue(myRecord).addOnCompleteListener{
}
}
}
名字和姓氏在一个单独的文件中声明如下:
class Hero(val id: String?, val firstname: String, val lastname: String)
当我运行该应用程序并导航至该片段时,该应用程序崩溃并显示以下错误:
kotlin.UninitializedPropertyAccessException:lateinit属性forename_input_account尚未初始化
答案 0 :(得分:2)
forename_input_account = forename_input_account
将forename_input_account
设置为其自身。这没有实际效果,并且由于您在尝试为lateinit var
分配值之前会崩溃。
如果您尝试使用Kotlin synthetic properties,请删除三个lateinit var
属性,而仅使用Kotlin合成属性,其作用域是指膨胀的view
。
否则,您需要使用findViewById()
或其他方法来获取View
分配给那些lateinit var
属性(例如forename_input_account = view.findViewById(R.id.forename_input_account)
)。
答案 1 :(得分:2)
您可以添加onCreateView并在其中设置布局
fun onCreateView(inflater: LayoutInflater, @Nullable container: ViewGroup, @Nullable savedInstanceState: Bundle): View {
return inflater.inflate(R.layout.example, container, false)
}