-
Notifications
You must be signed in to change notification settings - Fork 33
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_장수민_2주차 과제(2단계) #55
base: sumintnals
Are you sure you want to change the base?
전남대 Android_장수민_2주차 과제(2단계) #55
Conversation
추가된 파일은 모두 뷰를 구현하기 위한 리소스 파일입니다.
private fun insertDummyData(db: SQLiteDatabase?): 더미 데이터를 삽입하기 위한 함수입니다. onCreate()안에 호출하여 한 번만 삽입하도록 했습니다.
전체적으로 nullable -> non-nullable 타입으로 변경했습니다. ViewModelFactory: Repository에 context를 전달하기 위해 추가했습니다. getSearchResult(): 검색창에 입력한 문자열을 토대로 해당 문자열을 포함하는 모든 로우를 Place 리스트로 반환합니다.
리사이클러 뷰를 이용해 구현했습니다. 검색어 저장은 SharedPreference를 이용하였고, 배열을 json 형태로 저장하였습니다. HistoryAdapter 내부에서 findViewById 사용 대신 바인딩을 사용하도록 수정했습니다.
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.
MVVM에 Repository를 같이 사용하였는데(처음부터 Repository를 사용하려는 의도는 아니었으나, 초반에 찾아보다가 무조건 필수인 줄 알고 Repository를 만들어버려 그냥 사용해보기로 했습니다) 패턴을 잘 지킨것이 맞는지 궁금합니다!... 액티비티에서 추가로 ViewModel로 옮길 수 있는 부분이 있는지 궁금합니다.
보통 Repository는 담당하는 모델의 데이터를 저장, 조회, 변경하는 역할을 가지고, 데이터를 조합, 조작하는 코드는 뷰모델 혹은 유즈케이스라는 컴포넌트에 위임합니다. 지금 과제에서는 뷰모델이 이 책임을 가지고 있다고 생각하고 코드를 작성해주세요.
검색어 기록 목록도 리사이클러 뷰로 구현하게 되었습니다. 요구 사항에 검색어 목록은 따로 어떤 방식으로 구현하라고 명시되어있지 않았는데, 어떤 식으로 구현하기를 원하셨는지 궁금합니다!!
지금처럼 리사이클러뷰로 구현하셔도 괜찮다고 생각합니다. :)
카카오 맵을 보면 장소, 주소, 버스 검색을 한번에 할 수 있던데, 어떤 방식으로 검색 기능을 구현한 것인지 궁금하다는 생각이 들었습니다. 단어를 검색하면 장소, 주소, 버스가 모두 다 뜰 때도 있고, 한 가지 종류만 뜰 때도 있는 것이 신기합니다! 거리와도 상관이 있는건지... 앱을 참고하다가 그냥 궁금해졌습니다 😄
제가 카카오 맵 개발자가 아니여서... 정확히 답변드리기는 어렵지만, 사용자가 검색 버튼을 클릭했을 때, 카카오 맵 내부에서는 수많은 일이 이루어지게 됩니다. 정의되어 있는 로직에 따라 우리가 보는 데이터가 만들어져 화면에 노출된다고 생각해주시면 될 것 같습니다.
3단계 요구사항에서 검색어 목록을 ListView로 구현하라는 조건을 보았습니다. ListView는 가로로 배치하는 것이 안된다고 알고 있는데, 2단계에서처럼 가로 스크롤을 하도록 구현하는 것인지, 아니면 그냥 세로 리스트로 구현하라는 것인지 궁금합니다.
RecyclerView로 구현하셔도 될 것 같습니다. ㅎㅎ
이전 PR 코멘트도 반영해주세요~!
} | ||
|
||
fun select(db: SQLiteDatabase, name:String, address: String, category: String) : String? { | ||
return null |
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.
앗 네!! 현재 PlaceRepository의 getSearchResults()함수를 사용해서 검색 결과를 가져오고 있습니다! 이 함수의 위치를 옮겨야 할까요?
fun getSearchResults(searchText: String): List<Place> {
val rDb = dbHelper.readableDatabase
val places = mutableListOf<Place>()
val query = "SELECT * FROM ${PlaceContract.TABLE_NAME} WHERE ${PlaceContract.TABLE_COLUMN_NAME} LIKE ?"
val cursor = rDb.rawQuery(query, arrayOf("%$searchText%"))
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
val name = cursor.getString(cursor.getColumnIndexOrThrow(PlaceContract.TABLE_COLUMN_NAME))
val address = cursor.getString(cursor.getColumnIndexOrThrow(PlaceContract.TABLE_COLUMN_ADDRESS))
val category = cursor.getString(cursor.getColumnIndexOrThrow(PlaceContract.TABLE_COLUMN_CATEGORY))
val place = Place(name, address, category)
places.add(place)
} while (cursor.moveToNext())
}
cursor.close()
}
return places
}
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.
그리고 Repository를 삭제하고 뷰모델에 기존 Repository에 있던 함수를 옮기면 될까요??
|
||
val searchHistoryList: LiveData<List<SearchHistory>> | ||
get() = _searchHistoryList | ||
init { |
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.
nit; 위의 코멘트를 확인해주세요. + 코드 포맷팅도 함께 적용해주세요. IDE에서 제공하는 기본 기능을 활용하시면 될 것 같습니다.
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.
초기화 블록을 위로 올리고, Code->Reformat Code를 하면 될까요??
category = itemView.findViewById<TextView>(R.id.category) | ||
|
||
itemView.setOnClickListener { | ||
itemClickListener?.onItemClick(absoluteAdapterPosition) |
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.
뷰가 재활용 되었을 때, absoluteAdapterPosition의 값도 적절히 변경될까요?
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.
https://velog.io/@paulus0617/Android-bindingAdapterPosition-vs.-absoluteAdapterPosition
해당 글을 참고한 결과, 리사이클러 뷰에서의 절대적 값을 반환해준다고 이해했습니다.
로그를 찍어보았을 때도 뷰가 재활용될 때마다 포지션 값이 적절히 변경되는 것으로 보이는데 맞을까요...?
2주차 과제
🛠️기능 사항(2단계)
가능한 MVVM 아키텍처 패턴을 적용하도록 한다.
추가한 기능
step1 PR서 리뷰대로 수정한 뒤 따로 머지하지 않고, step2 브랜치에서 이어서 작업했습니다!(과제 제출 시간에 맞추어 급하게 하느라 이렇게 하게 되었습니다...)
1단계 PR
💀어려웠던 부분
MVVM에 Repository를 같이 사용하였는데(처음부터 Repository를 사용하려는 의도는 아니었으나, 초반에 찾아보다가 무조건 필수인 줄 알고 Repository를 만들어버려 그냥 사용해보기로 했습니다) 패턴을 잘 지킨것이 맞는지 궁금합니다!... 액티비티에서 추가로 ViewModel로 옮길 수 있는 부분이 있는지 궁금합니다.
검색어 기록 목록도 리사이클러 뷰로 구현하게 되었습니다. 요구 사항에 검색어 목록은 따로 어떤 방식으로 구현하라고 명시되어있지 않았는데, 어떤 식으로 구현하기를 원하셨는지 궁금합니다!!
(이 부분은 과제에서 벗어난 부분이라 답변 안 주셔도 괜찮습니다!!)
카카오 맵을 보면 장소, 주소, 버스 검색을 한번에 할 수 있던데, 어떤 방식으로 검색 기능을 구현한 것인지 궁금하다는 생각이 들었습니다. 단어를 검색하면 장소, 주소, 버스가 모두 다 뜰 때도 있고, 한 가지 종류만 뜰 때도 있는 것이 신기합니다! 거리와도 상관이 있는건지... 앱을 참고하다가 그냥 궁금해졌습니다 😄
3단계 요구사항에서 검색어 목록을 ListView로 구현하라는 조건을 보았습니다. ListView는 가로로 배치하는 것이 안된다고 알고 있는데, 2단계에서처럼 가로 스크롤을 하도록 구현하는 것인지, 아니면 그냥 세로 리스트로 구현하라는 것인지 궁금합니다.
📷앱 사진