본문 바로가기

안드로이드/팁

[Android] Recyclerview 속 Edittext 데이터 유실 해결하기

반응형

게시글 작성 기능 구현하면서 사진 업로드 기능을 개발했습니다. 다중 사진을 업로드할때 사진별 코멘트 작성할 수 있는 화면과 같이 한 화면의 동일한 포멧에 Edittext가 여러개 필요한 경우 CustomView를 활용해 코드로 Edittext를 하나씩 추가하거나 Recyclerview를 활용하는 방법이 있습니다. 

정답은 없지만 세부 요구 사항과 익숙함 사이에서 방법을 많이 선택하는데 저는 주로 Recyclerview를 활용해 구현했습니다. Recylcerview 특성상 뷰를 재활용 하다보니  Edittext에 작성된 텍스트가 유실되는 이슈가 있어 포스팅을 남깁니다.

>> TextWatcher 활용 

 inner class MemoTextWatcher(var position: Int) : TextWatcher {

        override fun afterTextChanged(p0: Editable?) {
        }

        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
        }

        override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
            items[position].desc = p0.toString()
        }
    }

텍스트 TextWatcher를 활용해서  Recyclerview > ItemApdater > Viewholder에서 Edittext에 넣어줍니다.

class TodoAddItemAdapter(val activity: TodoAddActivity):RecyclerView.Adapter<TodoAddItemAdapter.ItemViewHolder>() {
	...
    
    
    inner class ItemViewHolder(private var binding: TodoAddItemBinding):RecyclerView.ViewHolder(binding.root) {
        ....
        binding.etMemo.setText(items[position].desc)
		binding.etMemo.addTextChangedListener(MemoTextWatcher(position))
    }
}

Edittext를 다시 그릴땐 TextWatcher로 작성된 items[position].desc를 text로 설정합니다. 

위처럼 Edittext가 변할때마다 데이터를 저장해서 보여주면, 스크롤을 움직여도 작성한 Edittext 데이터가 유실되지 않습니다.

 

조금 더 나은 방안이나 다른 방안으로 위 문제를 해결하신 분은 댓글에 남겨주시면 참고하겠습니다. 

반응형