dev/aos

[AOS] 다른 화면 띄우기 (Activity)

캄춰 2023. 10. 26. 23:02
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