Kotlin - DialogFragment中Edittext中的字符串不保存在数据类中
Posted
技术标签:
【中文标题】Kotlin - DialogFragment中Edittext中的字符串不保存在数据类中【英文标题】:Kotlin - String from Edittext in DialogFragment don't save in data class 【发布时间】:2021-11-19 19:31:00 【问题描述】:我在 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)
我的 MainFragment:
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)
我做错了什么?
【问题讨论】:
【参考方案1】:您在创建对话框时将newCat
字符串设置为文本视图文本,而不是在点击确定按钮时。所以你的字符串是空的。
尝试将val newCat = txtNewCat.text.toString()
移动到您的确定按钮回调中,如下所示:
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()
【讨论】:
非常感谢 :)以上是关于Kotlin - DialogFragment中Edittext中的字符串不保存在数据类中的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从 RecyclerView 传递到 Kotlin 中的 DialogFragment?