728x90
걍 따라하면 되고 Error없애는 게 관건
navController = nav_host_fragment 오류
navController = *findNavController*(R.id.*nav_host_fragment*)로 바꾸기
Android studio 홈페이지에서 찾아봤는데 뭐 어쩌라는 건지 뭐때문에 이건되고 저건 안되나 몰라
error: failed linking references
내가 건드린 color는 분명 이름 다바꿨는데 어디서 에러가 났나 했더니
themes.xml, themes.xml(night) 에 color가 죄다 이름이 달랐다.바꾸니까 build는 되는데
킹받는다.. 내가 이거 할려고 백신프로그램 지울 순 없잖아요.. 나중에 폰 연결해야지
btn_next import error
import kotlinx.android.synthetic.main.fragment_main.*
에서 error가 생겨서 [build.gradle] (:app) 에 추가
id 'kotlin-android'
근데도 안됨^^
version변경되면서 kotlin-android.. 지원 안한다고 함 그래서 바뀐 거랑 좋은 점
- https://thdev.tech/android/2020/10/07/Remove-kotlinx-synthetic/kotlin.android.synthtic 대신에 findViewById 활용 → Android 4.2부터는 Viewbinding 사용
- 사용하는 이유
- view 참조 방법
- ButterKnife : 외부 라이브러리 사용
- ViewBinding : 안드로이드 아키텍처 구성요소
- DataBinding : 뷰결합 + 데이터 결합까지 가진 아키텍처 구성요소
- view 참조 방법
- 주요 특징2️⃣ 자동으로 xml 레이아웃 파일의 뷰들이 id와 같은 이름을 가진 멤버변수를 가진 클래스는 그 이름이 규칙적으로 명명되어 만들어짐. 레이아웃 파일의 이름에 맞게 클래스 이름이 만들어짐
- activity_xxx.xml ⇒ ActivityXxxBinding fragment_xxx.xml ⇒ FragmentXxxBinding
- 1️⃣ xml 레이아웃 파일(activity_main.xml)의 뷰들을 이미 연결(Bind)하고 있는 클래스가 자동으로 만들어져서 개발자가 직접 뷰 참조변수를 만들어서 findViewBy()로 찾아서 연결하는 일련의 모든 작업을 할 필요가 없게 만든 기능
- ViewBinding 사용 설정 [build.gradle] (module)
- [MainActivity.kt], [MainFragment.kt]
binding.btnNext.setOnClickListener{ navController.navigate(R.id.action_mainFragment_to_questionFragment) }
- 사용하는 이유
- ⇒ binding.btnNext.setOnClickListener로 바꿔써야 한다(킹받,,)
- 이거보고 차근차근 다 바꿈 아아 걍 문제 덩어리자식 욱여넣어놔서 다시 이해필요
- viewBinding{ enabled = true }
- https://kitesoft.tistory.com/108
- [QuestionFragment.kt], [SelectionFragment.kt], [ResultFragement.kt]
- binding을 위한 변수 설정 : .xml에서의 id를 가져오기 위해 FragmentXxxBinding 잘 바꿔줘야 함
- class ResultFragment : Fragment() { private var _binding : FragmentResultBinding? = null private val binding get() = _binding!! ..
- 화면 전환을 여기서 하는 것 같음
- inflate 가 뭔지 다시 알아보기
override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = FragmentQuestionBinding.inflate(inflater, container, false) val view = binding.root return view }
- view에서 받은 변수 통해서 화면 전환
- 아 몰라 걍 뭐가 어디서 일어나는지 모르겠다
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) navController = Navigation.findNavController(view) binding.btnNext.setOnClickListener(this) }
- click 했을 때 btn 종류에 따른 화면 전환onDestroyView() 뭔지 찾아보라
- override fun onClick(v: View?) { when(v?.id){ R.id.btn_next->{ navController.navigate(R.id.action_questionFragment_to_selectionFragment) } } } override fun onDestroyView() { super.onDestroyView() _binding = null binding.btnNext.setOnClickListener{navController.navigate(R.id.action_questionFragment_to_selectionFragment)} }
Navigation 을 좀 더 효율적으로 쓸 방법이 있을 것 같다 ㅠ 공부해야지~
'DarkCircle > Kotlin' 카테고리의 다른 글
Firebase 연동_google, facebook 로그인 (0) | 2022.07.07 |
---|---|
Howlstagram error (0) | 2022.07.07 |
2주 차 (0) | 2022.07.06 |
1주 차 (0) | 2022.07.06 |
참고자료 (0) | 2022.07.06 |