Kotlin - 来自 DialogFragment 中 Edittext 的字符串不保存在数据中 class
Kotlin - String from Edittext in DialogFragment don't save in data class
我在 DialogFragment 中有一个 Edittext,它创建了一个新组。当我按“确定”时,组已创建但没有字符串。
我试着弄明白了,但我完全不知道哪里错了。
我的 DialogFragment:
class NewCategory(val listener: NewCategoryCreateListener) : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val view = requireActivity()
val newCategoryView = view.layoutInflater.inflate(R.layout.new_category, null)
val txtNewCat = newCategoryView.findViewById<EditText>(R.id.etNewCategory)
val newCat = txtNewCat.text.toString()
return AlertDialog.Builder(requireContext())
.setView(newCategoryView)
.setTitle("Create new category")
.setPositiveButton("OK") {di, i ->
listener.newCategoryCreate(newCat)
}
.setNegativeButton("Cancel") { di, i -> }
.create()
}
interface NewCategoryCreateListener{
fun newCategoryCreate(text: String)
}
}
我的主要片段:
class MainFragment : Fragment(), NewCategory.NewCategoryCreateListener {
private var _binding: FragmentMainBinding? = null
private val binding
get() = _binding!!
private lateinit var shoppingListViewModel: ShoppingListViewModel
private lateinit var categoryAdapter: CategoryAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.categoryRV.layoutManager = LinearLayoutManager(requireContext())
shoppingListViewModel.allCategories.observe(viewLifecycleOwner, {
updateCategories(it)
})
binding.addCategory.setOnClickListener {
val newCategory = NewCategory(this)
newCategory.show(childFragmentManager, "NewCategory")
}
}
private fun updateCategories(list: List<Category>) {
categoryAdapter = CategoryAdapter(list)
binding.categoryRV.adapter = categoryAdapter
}
override fun newCategoryCreate(text: String) {
val newCat = Category(text)
shoppingListViewModel.insertCategory(newCat)
}
}
我做错了什么?
您在创建对话框时将 newCat
字符串设置为文本视图文本,而不是在点击确定按钮时。所以你的字符串是空的。
尝试将 val newCat = txtNewCat.text.toString()
移动到您的 okay 按钮回调中,如下所示:
return AlertDialog.Builder(requireContext())
.setView(newCategoryView)
.setTitle("Create new category")
.setPositiveButton("OK") {di, i ->
val newCat = txtNewCat.text.toString()
listener.newCategoryCreate(newCat)
}
.setNegativeButton("Cancel") { di, i -> }
.create()
我在 DialogFragment 中有一个 Edittext,它创建了一个新组。当我按“确定”时,组已创建但没有字符串。
我试着弄明白了,但我完全不知道哪里错了。
我的 DialogFragment:
class NewCategory(val listener: NewCategoryCreateListener) : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val view = requireActivity()
val newCategoryView = view.layoutInflater.inflate(R.layout.new_category, null)
val txtNewCat = newCategoryView.findViewById<EditText>(R.id.etNewCategory)
val newCat = txtNewCat.text.toString()
return AlertDialog.Builder(requireContext())
.setView(newCategoryView)
.setTitle("Create new category")
.setPositiveButton("OK") {di, i ->
listener.newCategoryCreate(newCat)
}
.setNegativeButton("Cancel") { di, i -> }
.create()
}
interface NewCategoryCreateListener{
fun newCategoryCreate(text: String)
}
}
我的主要片段:
class MainFragment : Fragment(), NewCategory.NewCategoryCreateListener {
private var _binding: FragmentMainBinding? = null
private val binding
get() = _binding!!
private lateinit var shoppingListViewModel: ShoppingListViewModel
private lateinit var categoryAdapter: CategoryAdapter
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.categoryRV.layoutManager = LinearLayoutManager(requireContext())
shoppingListViewModel.allCategories.observe(viewLifecycleOwner, {
updateCategories(it)
})
binding.addCategory.setOnClickListener {
val newCategory = NewCategory(this)
newCategory.show(childFragmentManager, "NewCategory")
}
}
private fun updateCategories(list: List<Category>) {
categoryAdapter = CategoryAdapter(list)
binding.categoryRV.adapter = categoryAdapter
}
override fun newCategoryCreate(text: String) {
val newCat = Category(text)
shoppingListViewModel.insertCategory(newCat)
}
}
我做错了什么?
您在创建对话框时将 newCat
字符串设置为文本视图文本,而不是在点击确定按钮时。所以你的字符串是空的。
尝试将 val newCat = txtNewCat.text.toString()
移动到您的 okay 按钮回调中,如下所示:
return AlertDialog.Builder(requireContext())
.setView(newCategoryView)
.setTitle("Create new category")
.setPositiveButton("OK") {di, i ->
val newCat = txtNewCat.text.toString()
listener.newCategoryCreate(newCat)
}
.setNegativeButton("Cancel") { di, i -> }
.create()