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")
这会起作用:)
我想将一些数据从 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")
这会起作用:)