android-studio - Kotlin - DialogFragment中Edittext中的字符串不保存在数据类中
问题描述
我在 DialogFragment 中有一个 Edittext 并创建了一个新组。当我按“确定”时,组已创建但没有字符串。
我试着弄清楚,但我不知道哪里错了。
我的对话片段:
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()
到您的 OK 按钮回调内部,如下所示:
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()
推荐阅读
- sql-server - 获取节点元素的 XML 属性作为列,其他节点元素作为记录值
- python - 当我在我的 aiohttp 应用程序中使用 asyncpg 时出现奇怪的错误
- arrays - react useState数组显示未定义
- java - 可以在 Android Q 之前获取带有相册的图像,但不能在 Android Q 上
- deep-learning - 如何为训练提供 decimal_y_values,其中模型的最后一层有 10 个具有 softmax 激活和损失的神经元是 Earth Mover Loss
- spring-cloud-stream - Spring Cloud Function 和 Kafka
- bash - Shell - 获取 IP 地址的接口名称
- android - 以编程方式嵌套的片段不反映导航上的父生命周期
- sql - 使用 oracle 进行选择查询中的优先级
- laravel - Laravel - 检索枢轴关系