-
Notifications
You must be signed in to change notification settings - Fork 2
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
[feat] 리스트 뷰 <-> 검색 뷰 <-> 지도 뷰 플로우 구현 #203
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다!
검색화면에서 뒤로갔다 다시가면 검색값이 없는 문제요!!
검색화면 onCreate될 때 editText 값을 뷰모델에서 가지고 있다가 null이 아니면 보여주는걸로는 안되는 건가요?
@@ -46,7 +46,7 @@ class JoinGroupSearchActivity : | |||
finish() | |||
} | |||
|
|||
(pingleSearchJoinGroupSearch.editText).let { searchEditText -> | |||
(pingleSearchJoinGroupSearch.binding.etSearchPingleEditText).let { searchEditText -> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오홍 이런식으로 한 번 더 바인딩에 접근할 수 있군요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
원래 editText만 접근 가능하게 SearchBar를 만들어 놨었는데 x 버튼 등에도 접근이 필요해서 약간 수정을 했습니다요 ㅋㅋ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
버전대응 굳굳
이게 뭔 문제인가요??? 저 이해력이,,, 제송합니다,, 한 번만 다시 설명을 ㅜ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생핑! 아직 짧은 지식이라 꼼꼼히 봐도.. 전 좋아보이네요 콜백 으렵따 으려워
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
미쳐따 난 여기 model을 어떤 식으로 활용해야 될지 아직도 잘 모르겠서요 ㅜㅜ 이번에 나의 단체에서 단체 바꿀 때 써보려 그러긴 했는데
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
presentation 계층의 모델,,, 저는 보통 인텐트로 data class 값을 넘길 때 사용하는 편입니둥,,
인텐트로 넘길 수 있는 형태가 제한되어 있는 거 아시나용?? 그래서 보통 data class를 넘기고자 할 때 Parcelable 형태로 만들어서 넘긴답니다!
근데 또 막상 플젝을 하면 대부분의 것들은 서버에서 받아오니까 크게 쓸 일이 없는 것 같아요.
나의 단체는 하나의 액티비티가 아닌가용?? 하나의 액티비티에서는 인텐트로 값을 넘길 필요가 없으니까 presentation 계층에 모델을 안 만들어도 될 것 같아욤
@@ -25,6 +33,8 @@ class HomeFragment : BindingFragment<FragmentHomeBinding>(R.layout.fragment_home | |||
private val homeViewModel: HomeViewModel by activityViewModels() | |||
private lateinit var fragmentList: ArrayList<Fragment> | |||
private lateinit var fragmentStateAdapter: PingleFragmentStateAdapter | |||
private lateinit var resultLauncher: ActivityResultLauncher<Intent> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이건 검색 뷰에서 다시 홈으로 넘어왔을 때 정보를 남겨두려고 선언해두신 거 맞나용? 그냥 finish() 해주면 값이 남아있지 않나요?!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
정보를 남겨두기 위해서가 아니라 액티비티에서 다른 액티비티로 전환 후 결과를 받아와야 해서 사용했습니다.
A 액티비티에서 B 액티비티로 전환을 한다고 할 때 A에서 B로 데이터를 전달해야 할 때는 intent의 PutExtra를 사용하잖아요! 근데 반대로 B가 종료된 후 다시 A 화면으로 이동했을 때 B의 데이터를 A로 가져와서 사용해야 하는 경우에는 registerForActivityResult를 사용합니다 !
여기에서는 홈 프래그먼트에서 검색 액티비티로 이동한 후 검색 액티비티가 종료되었을 때 검색 창에 입력된 검색어 값을 가져와야 해서 이용했어요
@@ -51,11 +63,27 @@ class HomeFragment : BindingFragment<FragmentHomeBinding>(R.layout.fragment_home | |||
} | |||
|
|||
tvHomeGroup.text = homeViewModel.getGroupName() | |||
|
|||
with(pingleSearchHomeSearch.binding.etSearchPingleEditText) { | |||
isFocusable = false |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오호 이게 입력이 안 되도록 하는 그 칭구군요..
}, | ||
false | ||
) | ||
with(homeViewModel) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
깔끔핑 굿굿핑
if (isSearching) View.VISIBLE else View.GONE | ||
tvHomeGroup.visibility = if (isSearching) View.GONE else View.VISIBLE | ||
ivHomeSearch.visibility = if (isSearching) View.GONE else View.VISIBLE | ||
if (isSearching) setStopSearchCallback() else stopSearchCallback.remove() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이렇게 콜백 add해주고 remove 해주는 로직 아니면 콜백을 여러개 선언해주는 로직 둘 중에 하나를 선택해야 하는 거 아닌가요? 다른 방법 생각하구 계신 게 있을까용,, 전 뭔가 이게 최선 같아요 아직 잘 몰라서 그런 걸 수도 있지만은..ㅜ 다은핑 나와주세요...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
콜백을 계속 add 하는게 메모리 적으로 문제가 클 것 같아서,, 다른 방법(OnBackPressedCallback의 Enabled 속성을 조절하는,,)을 쓰고 싶었는데 안 되더라구요,, 그래서 remove를 통해 메모리 문제를 잡으려고 노력했는데 다른 방법이 있을까 궁금합니다,,, (도와줘 안핑이들)
).let { searchDescription -> | ||
SpannableString(searchDescription).apply { | ||
searchDescription.indexOf(getString(searchDescriptionRes)) | ||
.takeIf { it != INVALID_INDEX }?.let { index -> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오호 저한테 코리 달아주신 부분 takeIf 적용해서 구현하셨군용 ~ ~ 제가 구현해둔 것도 함 봐주세여 ㅋ 온보딩 추가 설명 뷰입니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
야무지게 잘 했더라구요 칭찬핑 ~ 근데 이거 많이 쓰여서 나중에 확장함수로 빼려구영 ㅋㅋ
import android.os.Build.VERSION_CODES.TIRAMISU | ||
import android.os.Parcelable | ||
|
||
inline fun <reified T : Parcelable> Intent.getCompatibleParcelableExtra(key: String): T? = when { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
헐 대박 뭔가 하고 찾아봤는데 사용자가 사용하고 있는 안드로이드 버전에 따라 분기를 고려한 코드군요... 너무 싱기해요
@@ -20,7 +20,7 @@ | |||
android:layout_marginVertical="12dp" | |||
android:layout_marginStart="14dp" | |||
android:background="@null" | |||
android:imeOptions="actionDone" | |||
android:imeOptions="actionSearch" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아하 이거 좋네요 키보드에 엔터 이모티콘 대신 서치 이모티콘이 나오도록 하는 사소하지만 좋은 속성이었군용.
이거 읽어보실래요.. 넘 신기해요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So 신기핑 !!!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
집에 가서 마저 보겠슘 ~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아니 사실 안 봄 ㅋㅋ 근데 코드를 봐야할 거 같아서 집 가서 볼게염
앗! 제가 헷갈린거같아요 ㅋㅎㅋㅋ 아닙니다 |
# Conflicts: # app/src/main/res/values/strings.xml
Related issue 🛠
Work Description ✏️
Screenshot 📸
Screen_recording_20240301_144113.mp4
Uncompleted Tasks 😅
To Reviewers 📢
요거 3가진데요,, 검색 뷰 뒤로가기는 딱히 문제가 되지 않는 것 같은데요 검색 여부에 따른 지도/리스트뷰의 지도/리스트뷰의 콜백 분기처리를 구현한 방식이 좋은 방법인지 모르겠어요 ㅠ 현재 isSearching 값이 변화할 때마다 콜백을 add 해주고 remove 해주는 방식으로 구현했서요,,,,,, ㅠㅠㅠㅠㅠㅠ