Kotlin android 从片段到 dialogFragment 的数据传输

Kotlin android data transfer from fragment to dialogFragment

我想将一些数据从 Fragment 传递到 DialogFragment(当我使用 onClickListener 单击视图时),但数据在 Dialog 中具有空值。

调试的时候发现VO数据没有问题。 (我的代码中的日志注释工作正常)

所以,我认为我没有正确使用 Bundle。

我该怎么做才能解决这个问题?

AccountFragment.class (recyclerview bindViewHolder)

 override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        val accountVO = list[position]
        val viewHolder = holder as AccountViewHolder

        viewHolder.text_account_title.text = accountVO.title
        viewHolder.text_account_bank.text = accountVO.bank
        viewHolder.text_account_account.text = accountVO.account
        viewHolder.text_account_name.text = accountVO.name

        viewHolder.text_account.setOnClickListener() {
            // log
            // Toast.makeText(context, "${accountVO.title}, ${accountVO.content}", Toast.LENGTH_SHORT).show()
            val accountFragment = AccountFragment()
            val bundle = Bundle()
            bundle.putString("title", accountVO.title)
            bundle.putString("content", accountVO.content)
            accountFragment.arguments = bundle
            AccountDetailDialogFragment().show(activity?.supportFragmentManager as FragmentManager, "dialog_event")
        }

    }

AccountDetailDialogFragment

class AccountDetailDialogFragment : DialogFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    val view = inflater.inflate(R.layout.activity_account_detail_dialog_fragment, container, false)
    view.text_account_detail_title.text = arguments?.getString("title")
    view.text_account_detail_content.text = arguments?.getString("content")

    isCancelable = false

    return view
}

}

你实际上并没有在你的 AccountDetailDialogFragment 上设置参数,你在你的 accountFragment 上设置了它(你甚至没有使用它):

val bundle = Bundle()
bundle.putString("title", accountVO.title)
bundle.putString("content", accountVO.content)
val dialogFragment = AccountDetailDialogFragment()
dialogFragment.arguments = bundle
dialogFragment.show(requireActivity().supportFragmentManager, "dialog_event")

请注意,您应该确保您的 AccountDetailDialogFragment 为其超类使用正确的导入(您不需要强制转换 supportFragmentManager)。

尝试让这个 inot onviewCreated

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
   view.text_account_detail_title.text = arguments?.getString("title")
  view.text_account_detail_content.text = arguments?.getString("content")

}

或者,如果它不起作用,您可以尝试使用实例,这是传输数据的好方法

改变这个

AccountDetailDialogFragment().show(activity?.supportFragmentManager as FragmentManager, "dialog_event")

accountFragment.show(activity?.supportFragmentManager as FragmentManager, "dialog_event")

这会起作用:)