【问题标题】:Kotlin android data transfer from fragment to dialogFragmentKotlin android数据从fragment到dialogFragment的传输
【发布时间】:2020-02-24 04:47:19
【问题描述】:

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

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

所以,我认为我没有正确使用 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
}

}

【问题讨论】:

    标签: android kotlin fragment bundle dialogfragment


    【解决方案1】:

    您实际上并没有在 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)。

    【讨论】:

      【解决方案2】:

      尝试获取这个 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")
      
      }
      

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

      【讨论】:

        【解决方案3】:

        改一下

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

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

        这会起作用:)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-23
          • 1970-01-01
          • 2013-07-26
          • 2013-08-04
          • 2021-11-14
          • 1970-01-01
          相关资源
          最近更新 更多