-
Notifications
You must be signed in to change notification settings - Fork 1
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
[메인페이지] #7
Comments
<recyclerView 코드 작성에 관한 고민> recyclerView = 어댑터 클래스 + 리사이클러 하나의 목록(xml) + 리사이클러 뷰를 보여줄 영역 파일 class MainAdapter(val datas: MutableList<String>?) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder{
return MainViewHolder(ItemRecyclerviewBinding.inflate(LayoutInflater.from(parent.context), parent, false ))
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val binding = (holder as MainViewHolder).binding
binding.mainItemList.text = datas!![position] //null 불허용
}
override fun getItemCount(): Int {
return datas?.size ?: 0 // datas.size가 0일때 0 반환
}
} onCreateViewHolder 메서드에서 서로 다른 리사이클러 뷰를 구분하여 각각 리사이클러 하나의 목록(xml)을 적용하려고 함 그러니까 내가 원하는 코드 형태는 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder{
if(프래그먼트1에서 사용하는 리사이클러 뷰일 때)
return MainViewHolder(ItemRecyclerviewBinding11.inflate(LayoutInflater.from(parent.context), parent, false ))
}
else if (프래그먼트2에서 사용하는 리사이클러 뷰일 때)
return MainViewHolder(ItemRecyclerviewBinding22.inflate(LayoutInflater.from(parent.context), parent, false ))
} |
<멀티뷰 타입 recyclerView> |
onBindViewHolder에서 이 둘을 나누는 방법은.... override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
// 이 둘을 나누는 방법은?
val binding_recycle = (holder as ListViewHolder).recycleBinding
binding_recycle.mainItemListRecycle.text = datas!![position] //null 불허용
val binding_todo = (holder as TodoViewHolder).todoBinding
binding_todo.mainItemListTodo.text = datas!![position] //null 불허용
} |
모앱 실습 때는 MutableList 넣었는데 대신에 Mutable 넣었다고 생각하면 됨 |
<주요 코드 : ViewHolder> class ListViewHolder(val recycleBinding:ItemRecyclerviewBinding) : RecyclerView.ViewHolder(recycleBinding.root) {}// recycler에 대한 목록
class TodoViewHolder(val todoBinding: ItemTodoBinding) : RecyclerView.ViewHolder(todoBinding.root){} // todo에 대한 목록
|
<주요 코드: Adapter>
class MainAdapter(val datas: MutableList<RecyclerViewData>?) : RecyclerView.Adapter<RecyclerView.ViewHolder>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when(viewType){
todo_type -> TodoViewHolder(ItemTodoBinding.inflate(LayoutInflater.from(parent.context), parent, false ))
list_type -> ListViewHolder(ItemRecyclerviewBinding.inflate(LayoutInflater.from(parent.context), parent, false ))
else -> { // list_type
throw RuntimeException("알 수 없는 viewType Error")
}
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if(holder is ListViewHolder){
val bindingRecycle = (holder as ListViewHolder).recycleBinding
bindingRecycle.mainItemListRecycle.text = datas!![position].title
} else if( holder is TodoViewHolder){
val bindingTodo = (holder as TodoViewHolder).todoBinding
bindingTodo.mainItemListTodo.text = datas!![position].todo
}
}
override fun getItemViewType(position: Int): Int {
return datas?.get(position)?.type ?: 0 // 0으로 설정 -> 타입이 없으므로 오류 발생하도록
} |
<주요 코드: RecyclerViewData>
// 리사이클러 뷰의 값을 저장
const val todo_type = 1
const val list_type = 2
data class RecyclerViewData( // 메인 목록에서 사용
val image: Int?,
val title: String?,
val todo: String?,
val name: String?,
val type: Int?,
) |
|
<RecyclerView 코드를 수정한 이유>멀티 뷰 형태의 코드를 일반적인 리사이클러 뷰 코드로 수정함. merge 전이라 같은 데이터 모델의 리사이클러 뷰를 사용하는 경우가 없음. |
<Custom Calendar를 만들기 위한 준비>
|
다음에 할 일
의논할 것
|
빛나라 우리의 🌟 o t c r당신의 노고에 감사드립니다 (SHAPE-UP 일동) 수정 요청단순하게 가자! 세로로 넘기는 ScrollView
가로로 넘기는 ScrollView
요청 사유1. 리사이클러뷰의 특성RecyclerView는 (1) 항목이 매우 많은 리스트 (2) 추가, 수정, 삭제 등의 동작으로 인해 수정이 잦은 리스트를 표현하기 적합한 뷰입니다. 리스트의 항목을 나타내는 과정에서 뷰를 재사용하기 때문에 이름에 recycler가 들어가는 것이기도 합니다. 현재 리사이클러뷰로 표현되고 있는 메뉴 항목은 4~5개이며, 개발자가 건드리지 않는 이상 개별 항목이나 전체 리스트에 변경이 생기지 않습니다. 2. 이벤트 핸들러 관련리사이클러뷰의 각 항목을 터치하는 동작에 대한 이벤트 처리가 물론 가능하나(리사이클러뷰에서 이벤트가 일어난 뷰의 position을 감지해 각 항목에 대한 처리를 관리함), 버튼으로 단순하게 구현했을 때(버튼에 직접 이벤트 핸들러 설정)에 비해 코드 레벨이 깊어집니다. 3. 버튼 스타일 지정리사이클러뷰의 데이터리스트에 이미지 속성 등을 설정해서 꾸미기보다는 버튼을 직접 커스텀하는 편이 좋겠습니다! (예) ImageButton 사용) 화이팅!!!구상안은 한참 전에 올려주셨는데 뒤늦게 발견해 피드백 드립니다. 번거롭게 해 드려 죄송합니다... 사죄합니다... 당신의 디테일한 고민에 cheers...☆ otcr님과 함께하는 우리 팀의 앞날이 창창하네요 |
화면 구성(UI) 논의
기능 면에서
The text was updated successfully, but these errors were encountered: