Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

경북대Android_정수현_3주차 과제_Step2 #77

Open
wants to merge 14 commits into
base: jsh00325
Choose a base branch
from

Conversation

jsh00325
Copy link

코드 작성하면서 어려웠던 점

카카오 맵 sdk를 적용하는 과정에서, 여러번의 시행착오를 겪었고, 공식문서와 함께 여러 블로그 글을 참고하여 프로젝트에 적용하였습니다. 이 과정에서 gradle에 dependency 추가나 원격 저장소 설정하는 부분이 가장 힘들었습니다.

코드 리뷰 시, 멘토님이 중점적으로 리뷰해줬으면 하는 부분

이전 코드의 검색 기록을 나타내는 부분에서, item들을 모두 지운 후 새로운 item을 추가하면 이전에 존재했던 item이 잠시 보였다가 새로운 item이 생성되는 애니메이션이 나타났습니다... 해당 부분을 고쳐보려고 계속 구글링해보았는데 해결책을 찾지 못해서 코드의 여러 부분을 건드려보니, 해당 RecyclerView의 visibility 속성을 건드리지 않으니 해당 현상이 나타나지 않는 것을 확인했습니다.

Visiblity를 조절한 경우의 영상 (visibility.o.mp4)

Visiblity를 조절하지 않는 경우의 영상 (visibility.x.mp4)

이 부분을 어떻게 고칠 수 있는지 궁금합니다..!

else -> "오류가 발생했습니다. 다시 시도해주세요."
},
Toast.LENGTH_SHORT
).show()
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

에러처리 잘 해주셨네요 🎉
케이스별로 깔끔하게 잘 구현 해주신것 같습니다!

추가 코멘트를 드리자면
현업에서는 어떤 에러가 발생했는지 감지 하기위해
에러가 발생하면 서버로 전송해 어떤 에러가 났었는지 모니터링합니다.
대표적인툴로 Firebase Crashlytics가 있습니다. 시간나실때 한번 보시는걸 추천드려요!

}
}, object : KakaoMapReadyCallback() {
override fun onMapReady(map: KakaoMap) {
Log.d("MapActivity", "onMapReady")
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(지금 대응하지 않으셔도 됩니다.)

엄밀히 따지면 맵과 관련된 서비스에서는
map이 ready된 후에 다른 작업을 시작하는게 맞긴 합니다.

@JSpiner
Copy link

JSpiner commented Jul 13, 2024

이전 코드의 검색 기록을 나타내는 부분에서, item들을 모두 지운 후 새로운 item을 추가하면 이전에 존재했던 item이 잠시 보였다가 새로운 item이 생성되는 애니메이션이 나타났습니다... 해당 부분을 고쳐보려고 계속 구글링해보았는데 해결책을 찾지 못해서 코드의 여러 부분을 건드려보니, 해당 RecyclerView의 visibility 속성을 건드리지 않으니 해당 현상이 나타나지 않는 것을 확인했습니다.

이부분 슬랙으로 깃허브 해당 코드 라인 태그해서 다시 문의주시겠어요?

@jsh00325
Copy link
Author

@JSpiner 슬랙으로 어떻게 문의하는지 모르겠어서 여기에 남깁니다...

해당 부분 코드 링크 : https://github.com/jsh00325/android-map-search/blob/0920a5d0f6a256a7b669569df90a37c75806c1f2/app/src/main/java/campus/tech/kakao/map/view/SearchLocationActivity.kt#L46-L59


해당 부분에서 다음과 같이 visibility를 조절하지 않도록 변경한다면, 맨 아래 영상처럼 애니메이션이 정상적으로 작동합니다.

binding.searchHistoryRecyclerView.isVisible = true

viewModel.history.observe(this) {
    it?.let { historyData ->
        val adapter = binding.searchHistoryRecyclerView.adapter as? HistoryAdapter

        if (adapter == null) {
            binding.searchHistoryRecyclerView.adapter = HistoryAdapter(historyData, this, viewModel)
        } else {
            adapter.updateDataList(historyData)
        }
    }
}
visibility.x.mp4

@JSpiner
Copy link

JSpiner commented Jul 13, 2024

@JSpiner 슬랙으로 어떻게 문의하는지 모르겠어서 여기에 남깁니다...

binding.searchHistoryRecyclerView.isVisible = true

binding.executePendingBindings()

executePendingBindings를 한번 넣어보시겠어요?
binding에 값을 설정하는건 다음 loop때 실행되게되는데
해당 함수를 실행하면 즉시 반영됩니다

@jsh00325
Copy link
Author

@JSpiner
기존 코드에 executePendingbinding을 추가했지만, 아래와 같이 깜빡이는 현상이 계속 나타납니다...
혹시 executePendingBindings()를 호출하는 시점이 잘못된 건가요..?

viewModel.history.observe(this) {
    it?.let { historyData ->
        binding.searchHistoryRecyclerView.isVisible = historyData.isNotEmpty()
        binding.executePendingBindings()

        val adapter = binding.searchHistoryRecyclerView.adapter as? HistoryAdapter
        if (adapter == null) {
            binding.searchHistoryRecyclerView.adapter =
                HistoryAdapter(historyData, this, viewModel)
        } else {
            adapter.updateDataList(historyData)
        }
    }
}
visibility.o.mp4

@JSpiner
Copy link

JSpiner commented Jul 14, 2024

아..! binding.searchHistoryRecyclerView.isVisible 를 false로 설정하게되는 시점에
adapter에 있는 내용도 미리 clear를 해보시겠어요?

@jsh00325
Copy link
Author

이렇게 말씀이신가요?

viewModel.history.observe(this) {
    it?.let { historyData ->
        var adapter = binding.searchHistoryRecyclerView.adapter as? HistoryAdapter

        if (adapter == null) {
            adapter = HistoryAdapter(historyData, this, viewModel)
            binding.searchHistoryRecyclerView.adapter = adapter
        } else {
            adapter.updateDataList(historyData)
        }

        if (historyData.isEmpty()) {
            binding.searchHistoryRecyclerView.isVisible = false
            adapter.updateDataList(emptyList())
        }
        else {
            binding.searchHistoryRecyclerView.isVisible = true
        }
        binding.executePendingBindings()
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants