передать класс данных между двумя фрагментами - PullRequest
0 голосов
/ 07 февраля 2019

Я думаю, что я делаю это неправильно, но это моя ситуация.
Я получаю данные json внутри фрагмента, затем обрабатываю их с помощью Gson в классе данных и отображаю их.Мне нужно снова использовать эти данные внутри другого фрагмента в настраиваемом адаптере счетчика, который готов.

Насколько я понимаю, невозможно передавать объекты, так как я могу это сделать!?Я попытался использовать пакет, и он не работал

метод onResponse (Первый фрагмент)

            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)
                }
        }

класс данных

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

getView вКастомный спиннер внутри второго фрагмента (мне нужны мои данные здесь)

    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
}

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019
  1. Отображаете ли вы два фрагмента в вашем Activity одновременно?Если это так, вы можете передать данные через него.Или реализуйте некоторый интерфейс / наблюдаемый / жилой для передачи данных между фрагментами.

  2. Если Fragment A выбирает данные, а затем вы изменяете Fragment A на Fragment B, сделайте ваши данныеклассы Parcelable и затем передают его в качестве аргументов при создании Fragment B:

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

Примечание: вы можете аннотировать свой класс данных с помощью @Parcelize.Затем компилятор сгенерирует для вас все Parcelable методы и фабричный класс.

После того, как вы передали данные в Fragment B при создании, получите их, например:

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

0 голосов
/ 07 февраля 2019

Действительно, можно передавать объекты из одного фрагмента в другой, если ваш класс объектов должен реализовывать Parcelable.И передать объект через пакет, вызвав putParcelable для объекта пакета.

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

И передать его между фрагментами через Bundle.

2.var fragment = YourFragment().apply {
   arguments = Bundle().apply{ putParcelable("dataKey",yourData) }
}
0 голосов
/ 07 февраля 2019

Идея может заключаться в использовании одноэлементного класса данных с HashMap<String, Object>, имеющим ключ с каким-то идентификатором, который вы создаете сами, а затем значением, являющимся объектом, который вы хотите получить.Таким образом, в onResponse вы добавите свои данные в HashMap в классе данных, а затем просто получите их из другого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...