
만다라트는 중앙 매트릭스의 주변 칸과 주변 매트릭스의 중앙 칸의 텍스트가 같아야한다. 여기서 EidtText를 연결하려고 하는데 문제가 발생했다

모든 칸들은 EditText로 이루어져 있고 수정버튼을 누르기 전까진 포커스가 되지 않는다. 수정버튼을 누르면 모든 칸에 Focusable을 주고 수정이 가능하게 된다.
여기에서 중앙 매트릭스의 주변 칸과 주변 매트릭스의 중앙 칸의 텍스트가 실시간으로 변하는 기능(이하 실시간 연결 기능)을 넣고 싶다. 해당 기능은 TextWatcher를 생성하고 부여하는 과정으로 구현할 수 있으나 어째서인가 원하는대로 진행되지 않는다.

수정 버튼의 클릭함수의 마지막에 실시간 연결 기능 함수를 호출 했지만 해당 기능은 작동하지 않았다. 그런데 실험 버튼의 클릭 함수에 실시간 연결 기능 함수만 작성하고 수정 버튼, 실험 버튼 순서대로 누르면 놀랍게도 해당 기능이 작동한다.

▼ 수정버튼
binding.btnEdit.setOnClickListener {
isEditable = !isEditable
for (mat in mandalartData.m9List){
for (os in mat.osList){
os.isEditable = isEditable
}
}
updateMan()
if (isEditable){
binding.btnEdit.setImageResource(R.drawable.baseline_done_24)
}
else {
saveMan()
binding.btnEdit.setImageResource(R.drawable.baseline_edit_24)
softKeyboardHide(this)
}
wholeCenterUpdate(binding.mainGrid)
}
▼ 실험버튼
binding.btnTest.setOnClickListener {
wholeCenterUpdate(binding.mainGrid)
}
▼ 만다라트 업데이트 함수
@SuppressLint("NotifyDataSetChanged")
fun updateMan(){
binding.mainGrid.adapter?.notifyDataSetChanged()
}
▼ 실시간 연결 기능 함수
fun wholeCenterUpdate(maingrid: RecyclerView){
val cenM9 = maingrid[ND.MANCENTER] as RecyclerView
for (i in ND.MANSTART .. ND.MANEND){
if (i == ND.MANCENTER) continue
val subM9 = maingrid[i] as RecyclerView
eachCenterUpdate(subM9[ND.MANCENTER] as EditText, cenM9[i] as EditText)
}
}
fun eachCenterUpdate(subCenterET: EditText, centerSubET: EditText) {
val scTextWatcher = object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
centerSubET.text = s
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
}
val csTextWatcher = object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
subCenterET.removeTextChangedListener(scTextWatcher)
subCenterET.text = s
subCenterET.addTextChangedListener(scTextWatcher)
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
}
subCenterET.addTextChangedListener(scTextWatcher)
centerSubET.addTextChangedListener(csTextWatcher)
}
아직 해당 사항은 잘 모르는 내용이라 더 공부해오고 해결 해보도록 하겠습니다.
다음 포스팅에선 해결했기를...