Ich möchte einige Daten von Fragment an ein DialogFragment übergeben (wenn ich mit onClickListener auf eine Ansicht klicke), aber die Daten haben leere Werte in Dialog.

Beim Debuggen stellte ich fest, dass VO-Daten kein Problem haben. (Protokollkommentare in meinem Code funktionieren korrekt)

Ich denke also, dass ich Bundle nicht richtig benutze.

Was kann ich tun, um dieses Problem zu lösen?

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
}

}

-1
DongDong 24 Feb. 2020 im 07:47

3 Antworten

Beste Antwort

Sie haben die Argumente für Ihr AccountDetailDialogFragment nicht festgelegt, sondern für Ihr accountFragment (das Sie nicht einmal verwendet haben):

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")

Beachten Sie, dass Sie sicherstellen sollten, dass Ihr AccountDetailDialogFragment den richtigen Import für seine Oberklasse verwendet (Sie sollten das supportFragmentManager nicht umsetzen müssen).

1
ianhanniballake 24 Feb. 2020 im 04:52

Versuchen Sie, dies in onviewCreated zu integrieren

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")

}

Oder wenn es nicht funktioniert, können Sie versuchen, eine Instanz zu verwenden. Dies ist eine gute Möglichkeit, Daten zu übertragen

0
Amit pandey 24 Feb. 2020 im 05:01

Ändere das

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

Zu

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

Das wird funktionieren :)

0
Prakash Reddy 24 Feb. 2020 im 05:02