마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

코틀린으로 Fragment에서 RecyclerView 에러 문의

0 추천

안녕하세요 개발자 선배님들
안드로이드 앱 처음 만들어보는 뉴비입니다.

앱을 한번 만들어보고 싶어서 입문했는데요 코틀린이란 언어가 괜찮아 보여서 코틀린으로 아주 간단한 앱을 만들어 보는중인데요
도저히 풀리지 않는 부분이 있어서 선배님들 도움을 받아보고 싶습니다.

일단 
item.xml <- adapter 에 연결한 xml
ItemAdapter.kt <- 어댑터 클래스
fragmentMain <- 첫번째 fragment 

구성은 이러합니다.
에러는 나지 않는데 아래와 같이 붉은색 문구가 뜹니다.

왜 이러는지 도무지 모르겠습니다. 도와주십시요 ㅠ
혹시 더 필요한 코드가 있으면 말씀 주시면 바로 올리겠습니다.

E/RecyclerView: No adapter attached; skipping layout

코드 부분 (코틀린입니다.)

private lateinit var binding: FragmentMainBinding
override fun onViewCreated(itemView: View, savedInstanceState: Bundle?) {
        super.onViewCreated(itemView, savedInstanceState)

        val items = arrayListOf(
            Items("남자"),
            Items("여자"))

        binding = FragmentMainBinding.inflate(layoutInflater)
        binding.rvMain.apply {
            // set a LinearLayoutManager to handle Android
            // RecyclerView behavior
            layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
            // set the custom adapter to the RecyclerView
            setHasFixedSize(true)
            adapter = ItemAdapter(items)
            Log.d("ack", "ㅠㅠ")
            Log.d("all", "ㅠㅠ")
        }
    }

디버깅을 해보면 아래와 같이 객체도 있는것 같구요

우라말라깽이 (250 포인트) 님이 2020년 12월 15일 질문

2개의 답변

+1 추천
그건 님의 UI코드가 너무 하는 일이 많아서 로그캣이 로그를 다 뿌리지 못해서 발생하는 것인데, 달리 말하면, 님의 UI코드는 성능상의 문제가 있을 수 있기 때문에, 프레임이 누락되는 증상이 나올 수도 있습니다. 코드를 리뷰하셔서 optimization 하시길 권장 드려요.

 

그리고 코틀린 스타일가이드가 있는데 클래스 명명규칙은 자바와 동일하게 대문자로 시작해야 합니다.

fragmentMain -> FragmentMain.

통상적으로는 MainFragment, MainActivity 처럼, 역할에 해당하는 키워드를 뒤에 붙여 줍니다. 하지만 이거는 별도의 규칙이 있는 건 아니구요.
spark (227,470 포인트) 님이 2020년 12월 15일 답변
+1 추천
데이터가 보이면. 아마도 로딩이 된 것으로 보입니다.

recyclerview의 상위 view가 뭔가요?

height가 0이 되어 있거나, 다른 것에 가려질 수도 있습니다.

recyclerview 상위 view가 이미 화면을 다 차지하고 있거나

scrollview 와 recyclerview 사이에 SwipeRefreshView가 있으면 height가 0로 되는 경우도 있습니다.

recyclerview의 height를 확인해보고, view구조를 잡아서 보일 수 있게 고쳐야 합니다.
Will Kim (43,170 포인트) 님이 2020년 12월 15일 답변
님의 소스를 다시 확인해 보니 will kim님 말씀이 맞는 상황일 듯 하네요.
혹시 리사이클러뷰와 스크롤뷰를 같이 쓰고 계신 거라면 리사이클러뷰의 높이를 조정해 보시구요, fillViewPort = "true"로 설정해 보세요.
...