положить список объектов в `Intent` - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть liveData в ViewModel, которая возвращает список объектов (mChannelList: MutableLiveData<List<Channels>> = MutableLiveData()). Я хочу отправить этот список другому занятию, используя putExtra из Intent. Я делаю код ниже, но когда код переходит в startActivity не go к новому действию (MainActivity).

Я корректно помещаю список объектов в Intent?

SplashScreenActivity.kt

(...)

            splashScreenViewModel.getList()?.observe(this, Observer { it : List<Channels> ->
                println("*********************** ${it}")
                val intent = Intent(this, MainActivity::class.java)
                intent.putExtra("EXTRA_PEOPLE", ArrayList(it))
                startActivity(intent)
            })

Класс данных:

data class Channels (
    var Id: Int?,
    var Title: String?,
    var CallLetter: String?,
    var ChannelPosition: Int?
)

MainActivity.kt

(...)

val bundle = intent.extras
val arr = this.intent.getParcelableArrayListExtra<Parcelable>("EXTRA_PEOPLE")

println("a lista : ${arr[0]}")

1 Ответ

1 голос
/ 22 апреля 2020

Не рекомендуется передавать список объектов между вашими действиями. Как сказал @IlyaMaier, более надежный способ - инициализировать ViewModel с контекстом приложения, а затем повторно использовать те же LiveData в вашей MainActivity.

, если вы хотите продолжить таким же образом, есть две причины, по которым ваша MainActivity не вызывается.

  1. Наблюдатель не может получить новые данные в вашем классе ViewModel.
  2. Класс данных должен расширять Pacelable, а также добавлять аннотацию @ Parcelize.

Как это:

@Parcelize
data class Channels (
var Id: Int?,
var Title: String?,
var CallLetter: String?,
var ChannelPosition: Int? 
) : Parcelable
...