【问题标题】:Kotlin - String from Edittext in DialogFragment don't save in data classKotlin - DialogFragment中Edittext中的字符串不保存在数据类中
【发布时间】: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)
    }

}

我做错了什么?

【问题讨论】:

    标签: android-studio kotlin fragment dialogfragment


    【解决方案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()
    

    【讨论】:

    • 非常感谢 :)
    猜你喜欢
    • 2020-12-22
    • 2023-02-07
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2013-02-07
    • 1970-01-01
    相关资源
    最近更新 更多