티스토리 뷰

SMALL

FriendFragment -> DialogFriendAdapter

 

친구 이름을 검색하기 전에 친구 리스트가 모두 뜨고

검색을 시작하는 순간부터 검색어에 포함된 친구 이름의 리스트가 모두 뜨도록한다.

친구 이름은 공통 될 수 있으므로 중복될 수 있다.

 

검색 기능이 fragment_friend.xml에 있기 때문에 거의 모든 작업은 FriendFragment.kt에 이루어진다.

 

..

editText = binding.searchView   // 검색어 변수로 받음.

        editText.addTextChangedListener(object : TextWatcher {
            override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {
                // Optional: Add any functionality needed before text changes
            }

            override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {
                // Optional: Add any functionality needed during text changes
            }

            override fun afterTextChanged(editable: Editable) {
                val searchText = editText.text.toString() //editable.toString()
                searchList.clear()

                if (searchText.isEmpty()) {
                    dialogFriendAdapter.setFriendList(originalList)
                } else {
                    // 검색 단어를 포함하는지 확인
                    for (a in 0 until originalList.size) {
                        if (originalList[a].getName().toLowerCase().contains(searchText.toLowerCase())) {
                            searchList.add(originalList[a])
                        }
                    }
                    //dialogFriendAdapter.setFriendList(originalList)
                    dialogFriendAdapter.setFriendList(searchList)
                }
            }
        })
    //
        // 리사이클러뷰, 어댑터 연결
        val recyclerView: RecyclerView = binding.recyclerView
        recyclerView.layoutManager = LinearLayoutManager(requireContext())
        dialogFriendAdapter = DialogFriendAdapter()
        
        recyclerView.adapter = dialogFriendAdapter

        return binding.root
    }

 

마지막 리사이클러뷰, 어댑터 연결에서 몇번의 오류가 발생했다.

오류는 dialogFriendAdapter = DialogFriendAdapter() 부분 이었는데, 그 이유는

DialogFriendAdapter() 매개변수로 originalList를 넣어 dialogFriendAdapter에 originalList를 넣어주고 싶었기 때문이다.

즉, dialogFriendAdapter = DialogFriendAdapter(originList) 코드를 적어 오류가 발생했다.

이때 originList는 친구 리스트에 들어가야할 데이터이다.

그렇다고 위 코드대로 dialogFriendAdapter = DialogFriendAdapter() 처럼

매개변수에 아무것도 넣어주지 않으면 2가지의 이상한 점이 발생한다.

첫 번째는 앱에 처음으로 접속할 때, 전체 친구 리스트가 뜨지 않는다는 점이다.

검색 시작 전에는 화면이 검색창밖에 보이지 않는다. 텅 비어있는 화면에 검색을 시작해야만 친구 리스트가 뜨기 시작한다.

두 번째 이상한 점은 이름이 하나인 데이터도 여러개가 뜬다는 점이다.

이름이 1p ~ 50p있다고 가정하자. 그럼 1을 검색어에 입력했을 때, 1p, 11p, 21p ... 와 같이 1이 포함된 모든 친구 리스트가 화면에 뜬다. 이건 정상적으로 뜬다.

하지만 1p라고 결과물이 1개만 나오도록 검색하면 1p의 리스트가 3개나 뜬다. 즉 오류다.

 

그래서 해결방법은 dialogFriendAdapter = DialogFriendAdapter() 이 안에 매개변수를 적어주면

오류가 발생하고 그렇다고 DialogFriendAdapter에 매개변수를 추가해 주는 것도 앞 코드에 영향을 주니 그냥 비워두었다.

이때 고민한건 DialogFriendAdapter에 어떻게 originList를 넣을 것인가였다.

 

dialogFriendAdapter.setFriendList(originalList)

 

결국 이 코드를 dialogFriendAdapter = DialogFriendAdapter() 아래에 적어주어 문제를 해결할 수 있었다.

모두 정상적으로 작동한다.

까먹고 구현안한건, searchButton이 있는데 이를 활용하지 않은거다 ㅡㅡ

다시 수정의 길로...

반응형
LIST
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함