반응형
게시글 작성 기능 구현하면서 사진 업로드 기능을 개발했습니다. 다중 사진을 업로드할때 사진별 코멘트 작성할 수 있는 화면과 같이 한 화면의 동일한 포멧에 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 데이터가 유실되지 않습니다.
조금 더 나은 방안이나 다른 방안으로 위 문제를 해결하신 분은 댓글에 남겨주시면 참고하겠습니다.
반응형
'안드로이드 > 팁' 카테고리의 다른 글
[And] 백그라운드 위치 권한 사용하기 ( Android9,10 대응 ) (0) | 2021.04.29 |
---|---|
[And]출시 예약으로 배포 시점 조정하기! (0) | 2021.03.24 |
[안드로이드] 카카오 애드핏 연동시 주의해 앱 정지를 막자 - 기타 광고 포함 (0) | 2021.02.24 |
[안드로이드/Android] Gridlayout으로 시간표 만들기 (0) | 2021.02.22 |
[Android/ios] 카카오톡 공유하기 api - 템플릿 설정 및 앱 적용 (4) | 2021.02.06 |