1

When creating a popular fragment, I get an empty constructor error.

Please take a look at the code I wrote and how can I pass data when creating fragments?

   mAdapter = SubPagerAdapter(childFragmentManager)
                    for (doc in it.docs!!) {

                        mAdapter.addFragment(
                            PopularFragment(doc.code, "#${doc.name}", 10),
                            doc.name
                        )
                    }
                    viewpager.adapter = mAdapter
                    tabs.setupWithViewPager(viewpager)

class PopularFragment(private val hashTagsCode: Int, private val title: String, private val ItemCount: Int) : Fragment() {

    var mHashTagsCode = hashTagsCode
    var mTitle = title
    var mItemCount = ItemCount
}
ds park
  • 55
  • 1
  • 4

1 Answers1

2

You should always pass the data to Fragment using Bundle as arguments

 class PopularFragment : Fragment() {
    
        var mHashTagsCode = 0
        lateinit var mTitle :String
        var mItemCount = 0
        
        companion object{
           fun instance(hashTagsCode: Int, title: String, itemCount: Int){
                val data = Bundle()
                data.putString("hash_tag_codes", hashTagsCode)
                data.putString("title", title)
                data.putString("item_count", itemCount)
                return PopularFragment().apply{
                     arguments = data
                }
           }
        }
        
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
             mItemCount = arguments?.getInt("item_count")?:0
             mHashTagsCode = arguments?.getInt("hash_tag_codes")?:0
             mTitle = arguments?.getString("title")
        }
    
    }

And for creating instance

 mAdapter = SubPagerAdapter(childFragmentManager)
 for (doc in it.docs!!) {
      mAdapter
      .addFragment(PopularFragment.intsance(doc.code, "#${doc.name}", 10),doc.name)
 }
 viewpager.adapter = mAdapter
 tabs.setupWithViewPager(viewpager)
Rajan Kali
  • 12,627
  • 3
  • 25
  • 37