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()