Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

459
Views
pass data class between two fragments

I think I'm doing it wrong but this is my situation.
I'm getting json data inside a fragment then process it with Gson to a data class and display it. What I need is to use this data again inside another fragment in a custom spinner adapter which is ready.

As much as I understand it's impossible to pass objects so how can I do this !? I have tried to use bundle and it didn't work

the onResponse method (First fragment)

            override fun onResponse(call: Call?, response: Response?) {
            val jsonString = response?.body()?.string()
            val gson = GsonBuilder().create()
            val data = gson.fromJson(jsonString,currancyModel::class.java)
            countryData = data
            activity?.runOnUiThread {
                rootView.recyclerView.adapter = CountryAdapter(data)
                }
        }

the data class

data class currancyModel(val items: List<Item>)
data class Item(val countray :String,val rate:String)

the getView in the custom spinner adapter inside the second fragment (I need my data here)

    override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
    val view    = inflater.inflate(R.layout.custome_spinner,null)
    val img = view.findViewById<View>(R.id.spinner_image) as ImageView
    val countary_name     = view.findViewById<View>(R.id.spinner_country) as TextView
    img.setImageResource(R.drawable.us)
    countary_name.setText(country!![p0].countray)
    return view
}
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

  1. Do you display two fragments in your Activity simultaneously? If so, you can pass the data through it. Or implement some interface/observable/livedata to pass the data between the fragments.

  2. If Fragment A fetches the data and then you change Fragment A to Fragment B, make your data classes Parcelable and then pass it as arguments when creating Fragment B:

companion object {
    fun newInstance(yourData : DataClass) = FragmentB().apply { arguments = Bundle().apply {  putParcelable("dataKey",yourData) }
}

Note: you can annotate your data class with @Parcelize. Compiler will then generate all Parcelable methods and factory class for you.

After you passed the data to Fragment B on creation, retrieve it with, for example:

val data: YourData by lazy { arguments?.getParcelable("dataKey") as YourData }

over 4 years ago · Santiago Trujillo Report

0

Indeed it is possible to pass objects from one fragment to another given your object class should implement Parcelable. And passing the object through the bundle by calling putParcelable on the bundle object.

1. class CurrancyModel : Parcelable {
  //Implement Parcelable 
}

And pass it between the fragments via Bundle.

2.var fragment = YourFragment().apply {
   arguments = Bundle().apply{ putParcelable("dataKey",yourData) }
}
over 4 years ago · Santiago Trujillo Report

0

An idea could be to use a singleton data class, with a HashMap<String, Object> having a key with some kind of ID you create yourself, and then the value being the object you want to be able to retrieve. So in the onResponse you will add your data to the HashMap in the dataclass and then just retrieve it from the other class.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!