首页 > 解决方案 > 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)
    }

}

我做错了什么?

标签: android-studiokotlinfragmentdialogfragment

解决方案


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

推荐阅读