1. 오류상세

   - E/part3.chapter0: Unknown bits set in runtime_flags: 0x8000
     E/RecyclerView: No adapter attached; skipping layout

 

2. 사용 Libaray 및 기능

   - RecyclerView

   - binding

 

3. 발생이유

   - RecyclerView 사용기능 확인

   - binding 기법 확인 

9. 해결방법 - 1

   - getItemCount() 함수에서 return 시 size 확인

       Log를 이용해서 size가 정확히 return 되는지 확인 한다.

   - Adapter를 ListAdapter로 상속받아서 개발하면 getItemCount( ) 메서드를 생성하지 않아도 된다.

    - script

    public int getItemCount() {

        Log.d("size", data.size())
        return data.size();
    }

 

9. 해결방법 - 2

     - Adapter class는 정상적이라고 생각 하고...  

       Adapter class와 RecyclerView를 연결하는 부분을 확인한다.

     - 거의 layoutManager를 생성하지 않았을 경우에 위와 같은 오류가 발생한다.

     - 참고, layoutManager는 kotlin소스 내부에서도 할 수 있자만 View속성에서도 지정할 수 있다.

        <androidx.recyclerview.widget.RecyclerView

                 android:id="@+id/rv_list"

                 app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />

     - script

    private lateinit var adapter: BookAdapter
    private fun initBookRecyclerView() {
        adapter = BookAdapter()
        binding.bookRecyclerView.layoutManager = LinearLayoutManager(this)
        binding.bookRecyclerView.adapter = adapter
    }

 

9. 해결방법 - 3

    - binding 방식으로 개발 했으면서 setContentView에 binding방식으로 변경하지 않은 경우

    - default MainActivity.kt는 setContentView(R.id.activity_main) 으로 되어 있는데

      이것을 binding방식으로 개발할 때는 setContentView(binding.root)로 변경해야 된다.

    - RecyclerView를 사용하면서 binding.root로 변경하지 않으면 위와 같은 오류가 발생한다.

    - script

       private lateinit var binding: ActivityMainBinding
       binding = ActivityMainBinding.inflate(layoutInflater)
       setContentView(binding.root)

 

 

Posted by 농부지기
,