728x90
반응형
아주 간단한 앱이라면 한 화면에서 모든 처리가 가능하지만,
점점 규모나 살이 붙기 시작하면, 각 화면(페이지)마다 역할이 필요하기 마련이다.
대표적으로 두 가지 방법이 있다.
Activity를 새로 띄우는 것과 Fragment방식으로 화면을 대체시키는 것
다시 정리하자면,
Activity : 새로운 화면이 띄어짐
Fragment : 동일한 화면에 다른 화면이 띄어짐
웹을 배운 사람이라면 동적, 정적 페이지라는 의미와 비슷?한 느낌?
Button을 클릭하면 새로운 Activity를 띄울 것이다.
언어 : Kotlin
동작 : MainActivity ▶ CalculateActivity
[activity_main.xml]
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="nextActivity"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

버튼 하나만 중앙에 배치한 단순한 레이아웃
[activity_calculate.xml]
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CalculateActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="im Calculate Activity"
android:textSize="36sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

중앙에 텍스트만 있는 CalculateActivity 레이아웃
이제 MainActivity에서 CalculateActivity를 띄우겠다.
[MainActivity.kt]
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
NLog.v("#### onCreate..")
binding.button.setOnClickListener {
// componentName
val targetPackageName = packageName
val targetClassName = CalculateActivity::class.java.name
NLog.v("#### packageName:$targetPackageName")
NLog.v("#### className:$targetClassName")
val targetComponentName = ComponentName(targetPackageName, targetClassName)
val intent = Intent()
intent.component = targetComponentName
startActivity(intent)
}
}
[해석]
startActivity 메서드안에 intent를 실어주어야 어느 Activity를 실행할지 컴파일러가 알 수 있다.
그래서 intent를 만들어주어야 하고, ComponentName을 지정해주어야 한다.
ComponentName안에는 패키지명과 클래스명이 지정되어야 한다.
(보통은 action을 설정해주어 암시적으로 많이 사용한다)
728x90
반응형
'dev > aos' 카테고리의 다른 글
[AOS] resource string의 translatable역할 (0) | 2023.11.06 |
---|---|
[AOS] launchMode정리 (4) | 2023.10.30 |
[AOS] 웹뷰 WebView Guide (0) | 2023.10.23 |
[AOS] DataBinding XML이벤트 주고 받기 (0) | 2023.10.18 |
[AOS] 라이브러리(Library) 추가 방법 (0) | 2023.10.15 |