Kotlin android передача данных из фрагмента в dialogFragment - PullRequest
0 голосов
/ 24 февраля 2020

Я хочу передать некоторые данные из фрагмента в DialogFragment (когда я щелкаю по представлению с помощью onClickListener), но данные имеют пустые значения в диалоге.

При отладке я обнаружил, что у данных VO нет проблем , (регистрация комментариев в моем коде работает правильно)

Итак, я думаю, что я не использую Bundle правильно.

Что я могу сделать, чтобы решить эту проблему?

AccountFragment.class (утилита просмотра 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
}

}

Ответы [ 3 ]

1 голос
/ 24 февраля 2020

Вы на самом деле не устанавливали аргументы на 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).

0 голосов
/ 24 февраля 2020

изменить это

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

на

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

это будет работать:)

0 голосов
/ 24 февраля 2020

попробуйте получить этот 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")

}

Или, если он не работает, вы можете попробовать использовать экземпляр, это хороший способ передачи данных

...