-
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 4 replies
-
1. view binding을 late로 초기화하는 이유말씀하신 대로 ActivityMainBinding는 이미 만들어져 있습니다. 하지만 inflate할 때 필요한 class MainActivity : AppCompatActivity() {
private val binding: ActivityMainBinding = ActivityMainBinding.inflate(layoutInflater)
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root) 이유가 뭘까요? layoutInflator를 파고 들어가 보면 Window.java의 이 코드에 도달합니다.
LayoutInflator를 가져오려면 올바른 context가 있어야 하는데, MainActivity 클래스 생성 시점에는 context가 null입니다. context는 프레임워크가 onCreate를 불러 줄 시점에서야 가져올 수 있게 되고, 따라서 onCreate에서 binding을 초기화해주는 것입니다. 2. Adapter의 종류Adapter가 하는 역할은 세미나에서 말씀드렸던 것 처럼 데이터와 UI를 매핑시키는 것입니다. Adapter의 종류는 ListAdapter부터 상속 관계를 따라 위로 쭉 올라가서 Adapter.java에 도착한 후 어떤 것들이 얘를 상속하고 있나 살펴보면 알 수 있습니다. 다만 알아야 할 필요는 딱히 없을 것 같네요 3. View의 Adapterppt에서는 View 중에서도 ListView였기 때문에 adapter라는 멤버 변수가 있는 것입니다. ListView.java의 코드를 보면
이런 부분이 있고, mAdapter는 ListView가 상속하는 AbsListView 추상 클래스가 갖는 프로퍼티네요. 4. Adapter의 생성자의 list생성자 부분은 정해진 게 전혀 없고, 제 맘대로 짠 것이라 상관 없습니다. List를 넘기셔도 됩니다. ppt 만들 때는 Array로 했는데 영상에는 list로 했던 것 같네요. 그냥 Adapter에 넘기고 싶은 데이터를 전달해 주는 것입니다. HashMap일 수도 있고 Set일 수도 있겠죠. 저희는 Adapter가 생성자로 전달받은 데이터를 View로 바꾸는 방법만 5. 왜 생성자에 context를 넘겼는가?아마 동적으로 UI를 만들려고 넘겼던 걸로 기억합니다. TypeA 데이터가 List이었는데 리스트 원소별로 TextView를 하나씩 만들어서 LinearLayout에 추가하기 위해 context가 필요해서 전달했습니다. 그런데 context 전달 안 해줘도 6. getView에서 각 파라미터의 의미각 파라미터의 의미는 안스에서 convertView의 의미는 녹화 영상이나 ppt에 보시면 RecyclerView 설명 직전에 ViewHolder 설명 부분에 나와있습니다. Github Discussionlabel은 maintainer만 붙일 수 있다고 해서, 질문만 올려주시면 저희가 붙이겠습니다. |
Beta Was this translation helpful? Give feedback.
1. view binding을 late로 초기화하는 이유
말씀하신 대로 ActivityMainBinding는 이미 만들어져 있습니다. 하지만 inflate할 때 필요한
layoutInflator
가 문제입니다.실제로
이렇게 해 보면 이런 에러가 납니다.
이유가 뭘까요? layoutInflator를 파고 들어가 보면 Window.java의 이 코드에 도달합니다.