Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

467
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda