한글파일로만 정리해 놨었는데 클났다 언제 다 옮기지
2주차 : 액티비티 전환 및 프래그먼트 전환
FindViewById를 사용하던 과거와는 달리 채신기술
findviewByid에 비해 소스 간단, 및 Null 안정성:
개발자가 실수로 유효하지 않은 id를 사용하면 null 오류가 발생할 수 있다.
Gradle에 뷰바인딩 넣는거 잊지말기.
lateinit var binding: (Activity이름)Binding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = (Activity이름).inflate(layoutInflater)
setContentView(binding.root)
}
lateinit var binding : (Fragment이름)Binding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = (Fragment이름)Binding.inflate(inflater, container, false)
return binding.root
}
viewBinding 동작원리
viewBinding은 gradle에 설정하는 것 만으로 개발자가 작성한 레이아웃 파일들을 다음과 같은 공식으로 모두 바인딩클래스로 자동변환 해줍니다.
Manifest의 intent filter는 스타트액티비티를 하면 intent filter가 그 액티비티로 넘어가는느낌.
intent는 액티비티에서 사용하는 택배상자느낌
val intent = Intent(this, SongActivity::class.java)
intent.putExtra("title",song.title)
받을 때 따로 intent 변수선언을 안하는 듯?
if (intent.hasExtra("title") && intent.hasExtra("singer"))
{
binding.songTitleTv.text = intent.getStringExtra("title")
binding.songSingerTv.text = intent.getStringExtra("singer")
}
class Song(
val title : String = "",
val singer : String = ""
)
객체 선언하듯이 똑같이 선언
○ Intent
val intent = Intent(this, SubActivity::class.java)
startActivity(intent)
우리가 쓴 것
○ Log란
○ 토스트 메세지
○ Fragment 전환
메인 엑티비티 내에서의 fragment 전환
(context as MainActivity).supportFragmentManager.beginTransaction().replace(R.id.main_frm, AlbumFragment()).commitNowAllowingStateLoss()