Closed shirataki707 closed 2 years ago
そもそも横画面対応がうまくいっていなかったみたいなのでViewModelからRecyclerViewのデータの渡し方を検討してみます。 | demo |
---|---|
RecyclerVIewに渡すItem型へ変換する処理を置く場所を間違えていました🙇
is Event.Success -> {
// 時間をセット
binding.timeText.text = event.time
// リストに値をセット
// ここにおくと、再生成時にこの処理が走らない(Success型を破棄するようにしているため)のでViewModel内でこの処理を行い、Item型をUIStateに保持させておくように変更します。
// Itemに変更
uiState.repositories?.items?.forEach {
tempItems.add(
Item(
name = it.name,
ownerIconUrl = it.owner.avatarUrl,
language = it.language,
stargazersCount = it.stargazersCount,
watchersCount = it.watchersCount,
forksCount = it.forksCount,
openIssuesCount = it.openIssuesCount
)
)
}
adapter.submitList(tempItems)
// イベントを消費
viewModel.consumeEvent(event)
}
Eventの外に置くことで再生成時に値がセットされるようになりました🙇
// LiveDataを監視
viewModel.uiState.observe(viewLifecycleOwner) { uiState ->
if(uiState.repositories != null) {
// リストに値をセット ここ!!!!
adapter.submitList(uiState.repositories)
}
if (uiState.events.firstOrNull() != null) {
when (val event = uiState.events.firstOrNull()) {
is Event.Success -> {
// 時間をセット
binding.timeText.text = event.time
// イベントを消費
修正完了しました!レビューお願いします!
確認しました!マージしても大丈夫だと思います!
リポジトリの詳細画面からランキング一覧に戻った際に,もともと表示されていたランキングが消えてしまいます. 更新ボタンを押した場合だけでなく,Fragmentが再生成されたときにもrecyclerViewにデータを表示させるイベントが必要なのか,そもそもFragmentの遷移時に前の画面を保持する処理を追加すべきなのかを考える必要がありそうです!