Skip to content

Commit

Permalink
[fix] #192 마이피드 프래그먼트에서도 onStart에서 리스트 재조회 하지 않도록 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
leeeha committed Sep 10, 2023
1 parent d90b96b commit 2541240
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,7 @@ class WineyFeedFragment :

private fun navigateToDetail(wineyFeed: WineyFeed) {
val currentItemSnapshotList = wineyFeedAdapter.snapshot()
Timber.e("CURRENT PAGE SIZE: ${currentItemSnapshotList.size}")
Timber.e("CURRENT ITEM SIZE: ${currentItemSnapshotList.size}")

selectedItemIndex = currentItemSnapshotList.indexOf(wineyFeed)
Timber.e("CLICKED ITEM INDEX: $selectedItemIndex")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package org.go.sopt.winey.presentation.main.mypage.myfeed

import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.view.Gravity
import android.view.View
import androidx.core.view.isVisible
Expand All @@ -17,7 +16,6 @@ import androidx.lifecycle.repeatOnLifecycle
import androidx.paging.LoadState
import androidx.paging.PagingData
import androidx.recyclerview.widget.SimpleItemAnimator
import com.google.android.material.bottomnavigation.BottomNavigationView
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.launchIn
Expand All @@ -38,16 +36,14 @@ import org.go.sopt.winey.util.fragment.viewLifeCycleScope
import org.go.sopt.winey.util.fragment.wineySnackbar
import org.go.sopt.winey.util.view.UiState
import org.go.sopt.winey.util.view.WineyPopupMenu
import org.go.sopt.winey.util.view.setOnSingleClickListener
import timber.log.Timber

@AndroidEntryPoint
class MyFeedFragment : BindingFragment<FragmentMyfeedBinding>(R.layout.fragment_myfeed) {
private var selectedScrollPosition: Parcelable? = null
private var selectedItemIndex: Int = -1
private val viewModel by viewModels<MyFeedViewModel>()
private lateinit var myFeedAdapter: MyFeedAdapter
private lateinit var wineyFeedLoadAdapter: WineyFeedLoadAdapter
private var selectedItemIndex: Int = -1

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Expand All @@ -61,11 +57,6 @@ class MyFeedFragment : BindingFragment<FragmentMyfeedBinding>(R.layout.fragment_
initDeleteFeedStateObserver()
}

override fun onStart() {
super.onStart()
viewModel.getMyFeed()
}

private fun initAdapter() {
wineyFeedLoadAdapter = WineyFeedLoadAdapter()
myFeedAdapter = MyFeedAdapter(
Expand All @@ -81,6 +72,7 @@ class MyFeedFragment : BindingFragment<FragmentMyfeedBinding>(R.layout.fragment_
}

private fun restoreScrollPosition() {
Timber.e("RESTORE ITEM INDEX: $selectedItemIndex")
binding.rvMyfeedPost.post {
if (selectedItemIndex != -1) {
binding.rvMyfeedPost.layoutManager?.scrollToPosition(selectedItemIndex + 1)
Expand Down Expand Up @@ -130,7 +122,7 @@ class MyFeedFragment : BindingFragment<FragmentMyfeedBinding>(R.layout.fragment_
}

private fun initBackButtonClickListener() {
binding.imgMyfeedBack.setOnSingleClickListener {
binding.imgMyfeedBack.setOnClickListener {
navigateTo<MyPageFragment>()
parentFragmentManager.popBackStack()
}
Expand Down Expand Up @@ -178,25 +170,7 @@ class MyFeedFragment : BindingFragment<FragmentMyfeedBinding>(R.layout.fragment_
viewModel.getMyFeedListState.collectLatest { state ->
when (state) {
is UiState.Success -> {
myFeedAdapter.addLoadStateListener { loadState ->
when (loadState.refresh) {
is LoadState.Loading -> {
binding.clMyfeedEmpty.isVisible = false
binding.rvMyfeedPost.isVisible = false
}

is LoadState.NotLoading -> {
binding.rvMyfeedPost.isVisible = myFeedAdapter.itemCount > 0
binding.clMyfeedEmpty.isVisible =
myFeedAdapter.itemCount == 0
restoreScrollPosition()
}

is LoadState.Error -> {
Timber.tag("failure").e(MSG_MYFEED_ERROR)
}
}
}
initPagingLoadStateListener()
myFeedAdapter.submitData(state.data)
}

Expand All @@ -211,6 +185,28 @@ class MyFeedFragment : BindingFragment<FragmentMyfeedBinding>(R.layout.fragment_
}
}

private fun initPagingLoadStateListener() {
myFeedAdapter.addLoadStateListener { loadState ->
when (loadState.refresh) {
is LoadState.Loading -> {
binding.clMyfeedEmpty.isVisible = false
binding.rvMyfeedPost.isVisible = false
}

is LoadState.NotLoading -> {
binding.rvMyfeedPost.isVisible = myFeedAdapter.itemCount > 0
binding.clMyfeedEmpty.isVisible =
myFeedAdapter.itemCount == 0
restoreScrollPosition()
}

is LoadState.Error -> {
Timber.tag("failure").e(MSG_MYFEED_ERROR)
}
}
}
}

private fun initPostLikeStateObserver() {
viewModel.postMyFeedLikeState.flowWithLifecycle(viewLifeCycle).onEach { state ->
when (state) {
Expand All @@ -232,33 +228,33 @@ class MyFeedFragment : BindingFragment<FragmentMyfeedBinding>(R.layout.fragment_
}

private fun navigateToDetail(wineyFeed: WineyFeed) {
selectedItemIndex = myFeedAdapter.snapshot().indexOf(wineyFeed)
selectedScrollPosition = binding.rvMyfeedPost.layoutManager?.onSaveInstanceState()

val intent = Intent(requireContext(), DetailActivity::class.java)
intent.putExtra(KEY_FEED_ID, wineyFeed.feedId)
intent.putExtra(KEY_FEED_WRITER_ID, wineyFeed.userId)
intent.putExtra(KEY_PREV_SCREEN, MY_FEED_SCREEN)
startActivity(intent)
val currentItemSnapshotList = myFeedAdapter.snapshot()
Timber.e("CURRENT ITEM SIZE: ${currentItemSnapshotList.size}")

selectedItemIndex = currentItemSnapshotList.indexOf(wineyFeed)
Timber.e("CLICKED ITEM INDEX: $selectedItemIndex")

Intent(requireContext(), DetailActivity::class.java).apply {
putExtra(KEY_FEED_ID, wineyFeed.feedId)
putExtra(KEY_FEED_WRITER_ID, wineyFeed.userId)
putExtra(KEY_PREV_SCREEN, MY_FEED_SCREEN)
startActivity(this)
}
}

private inline fun <reified T : Fragment> navigateTo() {
parentFragmentManager.commit {
replace<T>(R.id.fcv_main, T::class.simpleName)
}
val bottomNav: BottomNavigationView = requireActivity().findViewById(R.id.bnv_main)
bottomNav.selectedItemId = R.id.menu_mypage
}

companion object {
private const val KEY_FEED_ID = "feedId"
private const val KEY_FEED_WRITER_ID = "feedWriterId"
private const val KEY_PREV_SCREEN = "PREV_SCREEN_NAME"

private const val POPUP_MENU_OFFSET = 65
private const val MSG_MYFEED_ERROR = "ERROR"
private const val TAG_FEED_DELETE_DIALOG = "DELETE_DIALOG"

private const val MY_FEED_SCREEN = "MyFeedFragment"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class MyFeedViewModel @Inject constructor(
}
}

fun getMyFeed() {
private fun getMyFeed() {
viewModelScope.launch {
_getMyFeedListState.emit(UiState.Loading)

Expand Down

0 comments on commit 2541240

Please sign in to comment.