Creo que lo estoy haciendo mal, pero esta es mi situación.
Obtengo datos json dentro de un fragmento, luego los proceso con Gson a una clase de datos y los muestro. Lo que necesito es usar estos datos nuevamente dentro de otro fragmento en un adaptador giratorio personalizado que esté listo.
Por lo que entiendo, es imposible pasar objetos, ¿cómo puedo hacer esto? Intenté usar el paquete y no funcionó.
el método onResponse (primer fragmento)
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) } }la clase de datos
data class currancyModel(val items: List<Item>) data class Item(val countray :String,val rate:String)el getView en el adaptador giratorio personalizado dentro del segundo fragmento (necesito mis datos aquí)
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 }¿Muestras dos fragmentos en tu Activity simultáneamente? Si es así, puede pasar los datos a través de él. O implemente alguna interfaz/observable/datos en vivo para pasar los datos entre los fragmentos.
Si el Fragment A obtiene los datos y luego cambia el Fragment A al Fragment B , haga que sus clases de datos Parcelable y luego páselas como argumentos al crear Fragment B :
companion object { fun newInstance(yourData : DataClass) = FragmentB().apply { arguments = Bundle().apply { putParcelable("dataKey",yourData) } } Nota: puede anotar su clase de datos con @Parcelize . Luego, el compilador generará todos los métodos Parcelable y la clase de fábrica por usted.
Después de pasar los datos al Fragment B en la creación, recupérelos, por ejemplo:
val data: YourData by lazy { arguments?.getParcelable("dataKey") as YourData }
De hecho, es posible pasar objetos de un fragmento a otro dado que su clase de objeto debe implementar Parcelable. Y pasar el objeto a través del paquete llamando a putParcelable en el objeto del paquete.
1. class CurrancyModel : Parcelable { //Implement Parcelable }Y pásalo entre los fragmentos a través de Bundle.
2.var fragment = YourFragment().apply { arguments = Bundle().apply{ putParcelable("dataKey",yourData) } }Una idea podría ser usar una clase de datos singleton, con un HashMap<String, Object> que tenga una clave con algún tipo de ID que cree usted mismo, y luego el valor sea el objeto que desea poder recuperar. Entonces, en onResponse , agregará sus datos al HashMap en la clase de datos y luego simplemente los recuperará de la otra clase.