简体   繁体   English

通过 bundle kotlin 在两个分片之间传递数据

[英]Pass data between two fragments by bundle kotlin

I have two fragments and want to open second fragment (WordFragment) when pressing button of the first one(SearchFragment) by Bundle.我有两个片段,并且想在按下 Bundle 的第一个片段(SearchFragment)的按钮时打开第二个片段(WordFragment)。 But Fragment shwos default data instead of the passed one.但是 Fragment 显示默认数据而不是传递的数据。

ClickListener in First Fragment:第一个片段中的 ClickListener:

 searchDefAdapter = SearchDefAdapter(
            object : SearchDefAdapter.OnItemClickListener {
                override fun onItemClick(position: Int) {
                    val bundle = Bundle()
                    val arr = arrayOf("word", "слово", "I give you my word")
                    bundle.putStringArray(INFO_BUNDLE_ID, arr)
                    val wordFragment = WordFragment()
                    wordFragment.arguments = bundle
                    parentFragmentManager.beginTransaction().apply {
                        replace(R.id.searchFragment, WordFragment())
                        commit()
                    }
                }
            },
            object : SearchDefAdapter.OnItemClickListener {
                override fun onItemClick(position: Int) {
                    //viewModel.saveWord(position)
                }
            }
        )

Second Fragment:第二个片段:

class WordFragment : Fragment() {
    private var _binding: FragmentWordBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = FragmentWordBinding.inflate(inflater, container, false)
        val view = binding.root

        arguments?.let {
            val translation = it.getStringArray(INFO_BUNDLE_ID)
            if (translation != null){
                binding.wordTitleTv.text = translation[0]
                binding.translationTv.text = translation[1]
                binding.exampleTv.text = translation[2]
            }
        }

        return view
    }

    override fun onDestroyView() {
        _binding = null
        super.onDestroyView()
    }
}

this is because you create new WordFragment here replace(R.id.searchFragment, WordFragment()) instead of putting the one you added the bundle to it.这是因为您在这里创建了新的 WordFragment replace(R.id.searchFragment, WordFragment())而不是将您添加的包放入其中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM