ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Dialog 오류에 대한 해결
    프로젝트/영어단어 잠금화면 2021. 12. 2. 13:57

    단어 리스트에 Dialog를 추가해 한 단어에 대해 다양한 뜻과 삭제 기능을 제공하고 있다.

     

    하지만 이 기능을 구현하고, 단어장을 초기화 한 뒤

    다양한 뜻을 보여주는 Dialog가 몇 개씩 겹쳐서 뜨는 것을 확인하였고,

    이를 고치는 과정을 보여주고자 한다.

     

    실제 버그는 다음과 같다.

     

    최초 버그

     

    이를 해결하기 위한 과정을 선보인다.

     

    2021-12-02

     

    문제를 간단히 해결했다.

     

    다음의 코드가 있다.

    if ( wordList.size != 0) {
        binding.dialogMainWord.text = wordList[0].word
        binding.meanRecyclerview.adapter = DialogRecyclerViewAdapter(wordList, context)
        binding.meanRecyclerview.layoutManager = LinearLayoutManager(context)
    }
    dlg.show()
    if ( wordList.size != 0) {
        binding.dialogMainWord.text = wordList[0].word
        binding.meanRecyclerview.adapter = DialogRecyclerViewAdapter(wordList, context)
        binding.meanRecyclerview.layoutManager = LinearLayoutManager(context)
        dlg.show()
    }

     

    양 코드의 차이점은 리스트의 크기가 0일 때 다이얼로그를 띄우냐, 아니면 그 조건과 관계없이 일단 띄우는 것이냐.

     

    일단 기존 코드는 윗 코드, 문제를 해결한 코드는 아래 코드다.

     

    당연히 리스트 내부의 요소들이 비어있을 때마저 다이얼로그를 띄우는 것이 말이 안 된다고 생각했기 때문에 아래 코드로

    변경을 시도했지만 이해가 가지 않는 지점이 있다.

     

    이 다이얼로그가 실행되는 시점은 단어 리스트 Fragment에서 onCreateView가 될 때 최초 init 함수가 실행되고, 그곳의 RecyclerView의 OnItemTouchListener에서 onItemClick에서만 해당 함수를 실행하게 되는데, 그렇게 되면 사실상 RecyclerView의 Item을 클릭했을 때만 해당 함수가 실행되면서 다이얼로그를 출력해야 하는데, 일반적으로도 실행이 된다는 것이 이상했다.

     

    이해가 가지 않는 지점에 대해서 일단 LiveData를 사용하고 있고, 이로 인한 문제인지를 먼저 파악해봐야할 것 같다.

    만약 LiveData의 문제가 맞다면 아마 LifeCycle에 대해서 제대로 이해하지 못한채로 사용하고 있다는 생각이 드는데

    현재 리팩토링을 통해서 코드의 가독성도 높이면서, MVVM 패턴으로 코드를 변화하는 단계라 이런 사소한 버그들도

    생겨난 것 같다. 일단 LiveData 관련 공부를 좀 더 해보고, 다른 글에서 후술하도록 하자.

    '프로젝트 > 영어단어 잠금화면' 카테고리의 다른 글

    Android Package  (0) 2022.12.09
    잠금화면을 만드는 과정  (0) 2021.12.07
    Room Column 전체 삭제에 대한 고찰  (0) 2021.12.02

    댓글

android, kerriganlove, successful