Android에서 Fragment 안에 RecyclerView 를 사용했을 때 list에 추가한 데이터가 계속 화면에 나타나지 않았고, 아래와 같은 에러 메세지가 나왔다.
E/RecyclerView: No layout manager attached; skipping layout
보통 Adapter 에서 getItemCount에서 return 0을 했거나,
recyclerView.layoutManager 설정을 해주지 않았을 경우,
recyclerView.adapter 설정을 해주지 않았을 경우 생기는 에러라고 한다. (kotlin 문법 기준)
본인은 fragment의 onCreateView에서 설정을 해주었는데, 마지막 return을 아래와 같이 해주었기 때문에 생긴 에러 였다.
return inflater.inflate(R.layout.fragment_scan, container, false)
전체 error code는 이러하다.
linearLayoutManager와 recyclerAdapter는 전역변수로 선언하였고,
private var linearLayoutManager: RecyclerView.LayoutManager? = null
private var recyclerAdapter: RecyclerView.Adapter<ScanRvAdapter.Holder>? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater!!.inflate(R.layout.fragment_scan, container, false)
val recyclerView: RecyclerView = view.findViewById(R.id.scanRecyclerView)
recyclerAdapter = ScanRvAdapter(scanList)
linearLayoutManager = LinearLayoutManager(activity)
recyclerView.layoutManager = linearLayoutManager
recyclerView.adapter = recyclerAdapter
return inflater.inflate(R.layout.fragment_scan, container, false)
}
수정한 코드는 아래와 같다.
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater!!.inflate(R.layout.fragment_scan, container, false)
val recyclerView: RecyclerView = view.findViewById(R.id.scanRecyclerView)
recyclerAdapter = ScanRvAdapter(scanList)
linearLayoutManager = LinearLayoutManager(activity)
recyclerView.layoutManager = linearLayoutManager
recyclerView.adapter = recyclerAdapter
return view
}