drag and drop 을 만들었는데 잘못쓰겠다는 아저씨들이 있어서 만들게 되었다.
올드한 아재들을 위한 버튼형식의 이동이다.
1. 아이템 최상단으로 이동
2. 아이템 상단이동 ( 트레이드 )
3. 아이템 하단이동 ( 트레이드 )
4. 아이템 최하단으로 이동
간단한 콜백 리스너 등록과 꾸준한 삽질로 제작하였다.
1. adpater 의 클릭이벤트 등록
Adapter.kt
binding.taskChangeUpIv.setOnClickListener {
if(position > 1)
callBack.onUpClick(position)
}
binding.taskChangeDownIv.setOnClickListener {
if(position < maxSize - 2)
callBack.onDownClick(position)
}
binding.taskChangeFullUpIv.setOnClickListener {
if(position > 0)
callBack.onFullUpClick(position,1)
}
binding.taskChangeFullDownIv.setOnClickListener {
if(position < maxSize - 2)
callBack.onFullDownClick(position,maxSize-2)
}
우리 똑똑한 개발자님들은 이름만봐도 대충 뭔지 아실거라 믿는다.
callback.kt
콜백에 리스너 등록
fun onUpClick(position: Int)
fun onDownClick(position: Int)
fun onFullUpClick(position: Int,minPosition: Int)
fun onFullDownClick(position: Int,maxPosition: Int)
activity.kt
override fun onUpClick(position: Int) {
viewModel.changeList.value?.let {
val selectData = it[position]
val upData = it[position - 1]
it[position] = upData
it[position - 1] = selectData
setRecyclerView(it, true, isChange = true)
}
}
override fun onDownClick(position: Int) {
viewModel.changeList.value?.let {
val selectData = it[position]
val upData = it[position + 1]
it[position] = upData
it[position + 1] = selectData
setRecyclerView(it, true, isChange = true)
}
}
override fun onFullUpClick(position: Int,minPosition :Int) {
viewModel.changeList.value?.let {
val selectData = it[position]
val clone = it.clone() as ArrayList<WorkDetailDto>
it[minPosition] = selectData
for(i in minPosition until position){
it[i+1] = clone[i]
}
setRecyclerView(it, true, isChange = true)
}
}
override fun onFullDownClick(position: Int,maxPosition : Int) {
viewModel.changeList.value?.let {
val selectData = it[position]
val clone = it.clone() as ArrayList<WorkDetailDto>
it[maxPosition] = selectData
for(i in position until maxPosition){
it[i] = clone[i+1]
}
setRecyclerView(it, true, isChange = true)
}
}
간단하게 람다를 이용하면 깔끔하게 사용할 수 있다.
1. it -> 아이템 정보를 가져오는 arraylist 의 클론을 가져온다.
2. 클론에 클론을 따서 저장해두고
3. 변경할 포지션은 미리 선점해서 바꾼다.
4. 나머지 변경될 부분은 간단한 람다포문을 이용하여 클론의 데이터와 변경해준다.
5. 리사이클러뷰에 set 해준다.
분명 버튼으로 바꿔버리면 드래그드롭 왜 안되냐고 하는 사용자가 있을거 같아서 드래그앤 드롭도 유지하고 버튼도 만들어서 명분을 제거하였다 .
-끝-
'프로그래밍 > kotlin' 카테고리의 다른 글
android sdk 33 alarmPermission (0) | 2023.12.28 |
---|---|
[kotlin] api 통신시 TimeOut error (0) | 2023.12.18 |
[Kotlin] google TabLayout 레이아웃간의 간격 벌리기 (0) | 2023.07.13 |
[Kotlin] switch track_selector (0) | 2023.07.13 |
[Kotlin] 뷰 이미지 리사이징 (0) | 2023.07.13 |