Kotlin : RecyclerView item EditText 중복 에러 해결
2023. 3. 27. 10:08ㆍ[Android APP] feat. Kotlin/Kotlin 공부
문제
1. RecyclerView Item에 EditText가 포함되어 있다.
2. RecyclerView Item을 추가하고, EditText를 수정할 수 있으며, 추가할 때 초기값을 넣어주고 setText로 세팅해준다.
3. 수정된 EditText값을 Item Data에 실시간으로 수정해주고 싶다.
4. TextWatcher를 onBind 부분에 넣어줬다.
5. error - 아이템을 수정한 뒤 추가 버튼을 누르면 처음 들어가는 초기값으로 전에 수정된 값들이 바뀐다.
원인
여러 방법과 여러 이유들을 생각하며 삽질해봤다.
내 경우에는 TextWatcher 사용 부분에서 각 아이템에 Listener가 끊기지 않고 사용되었고, RecyclerView에서 Recycle이 일어나면서 다른 아이템에도 영향을 미쳤다.
해결
1. onBind 부분에 TextWatcher를 연결해준다.
@SuppressLint("NotifyDataSetChanged")
override fun onBindViewHolder(viewHolder: OutsideViewHolder, position: Int) {
val listPosition = outSideData[position]
viewHolder.watcher = viewHolder.binding.outsideItemEditText.addTextChangedListener {
listPosition.parentTitle = viewHolder.binding.outsideItemEditText.text.toString()
}
viewHolder.binding.attachBtn.setOnClickListener {
attachBtn.invoke(position)
}
val innerDataList = listPosition.fileList
viewHolder.innerAdapter.setData(innerDataList)
viewHolder.bind(listPosition)
}
2. 재사용 될 때 리스너를 해제시켜준다.
override fun onViewRecycled(holder: OutsideViewHolder) {
// Remove the TextWatcher when the view is recycled
holder.binding.outsideItemEditText.removeTextChangedListener(holder.watcher)
}
반응형
'[Android APP] feat. Kotlin > Kotlin 공부' 카테고리의 다른 글
Kotlin : 사진 등록 처리 (0) | 2023.08.25 |
---|---|
Kotlin : RecyclerView snapHelper (0) | 2023.03.27 |
Kotlin : 명시적 인텐트(Explicit Intent), 암시적 인텐트(Implicit Intent) (0) | 2023.02.27 |
Kotlin : Lottie Library(애니메이션 적용) (0) | 2023.02.22 |
Kotlin : Fragment의 생명주기 (0) | 2023.02.05 |