티스토리 뷰

프로그램개발

[ Kotlin ] Activity 화면 전환

인생참!! 2024. 10. 23. 17:10
728x90

1. Activity 화면전환 시 데이터 전달

// activity_main.xml 
<TextView
    android:id="@+id/textview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Main Activity"
    android:textSize="24sp"
    android:padding="10dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<Button
    android:id="@+id/btn_go"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Sub Activity 전환"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@id/textview" />
    
 // activity_sub.xml
 <TextView
    android:id="@+id/subview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Sub Activity"
    android:textSize="24sp"
    android:padding="10dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/tv1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="15sp"
    android:hint="전달 받은 데이터1"
    android:gravity="center"
    app:layout_constraintTop_toBottomOf="@+id/subview"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent" />

<TextView
    android:id="@+id/tv2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="전달 받은 데이터2"
    android:gravity="center"
    android:textSize="15sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/tv1" />

 

// MainActivity.kt
class MainActivity : AppCompatActivity() {
    val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        
        binding.btnGo.setOnClickListener {
            val intent = Intent(this, SubActivity::class.java)
            intent.putExtra("data1", "Sub 전달 데이타1")
            intent.putExtra("data2", "Sub 전달 데이타2")
            startActivity(intent)
        }
    }
}

// SubActivity.kt
class SubActivity : AppCompatActivity() {
    val binding by lazy { ActivitySubBinding.inflate(layoutInflater) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        binding.tv1.text = intent.getStringExtra("data1")
        binding.tv2.text = intent.getStringExtra("data2")
    }
}

실행화면
실행화면

728x90

2. Activity 간 양방향 데이터 전달

// activity_sub.xml
<TextView
    android:id="@+id/subview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Sub Activity"
    android:textSize="24sp"
    android:padding="10dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<EditText
    android:id="@+id/message"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="23sp"
    android:hint="보낼 메세지를 입력해 주세요."
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent" />

<Button
    android:id="@+id/btn_send"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintTop_toBottomOf="@+id/message"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    android:text="메인전송" />

<TextView
    android:id="@+id/tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="23sp"
    android:hint="전달 받은 데이타1"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toLeftOf="@id/tv2"
    app:layout_constraintTop_toBottomOf="@+id/btn_send" />

<TextView
    android:id="@+id/tv2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="23sp"
    android:hint="전달 받은 데이타2"
    app:layout_constraintTop_toBottomOf="@+id/btn_send"
    app:layout_constraintLeft_toRightOf="@+id/tv1"
    app:layout_constraintRight_toRightOf="parent" />
// MainActivity.kt
class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater).also {
            setContentView(it.root)
        }

        val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
            result: ActivityResult ->
            if (result.resultCode == RESULT_OK) {
                Toast.makeText(this, "수신 메세지 : "+ result.data?.getStringExtra("message"), Toast.LENGTH_LONG).show()
            } else {
                Toast.makeText(this, "메세지 수신 실패!!", Toast.LENGTH_SHORT).show()
            }
        }

        binding.btnGo.setOnClickListener {
            val intent = Intent(this, SubActivity::class.java)
            intent.putExtra("data1", "Sub 전달 데이타1")
            intent.putExtra("data2", "Sub 전달 데이타2")
            startForResult.launch(intent)
        }
    }
}

// SubActivity.kt
class SubActivity : AppCompatActivity() {
    private lateinit var binding: ActivitySubBinding
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySubBinding.inflate(layoutInflater).also {
        	setContentView(it.root)
        }

        binding.tv1.text = intent.getStringExtra("data1")
        binding.tv2.text = intent.getStringExtra("data2")

        binding.btnSend.setOnClickListener {
            var message = binding.message.text.toString().trim()
            if (message.isEmpty()) {
                Toast.makeText(this, "메세지를 입력해 주세요.", Toast.LENGTH_SHORT).show()
                binding.message.requestFocus()
            } else {
                intent.putExtra("message", binding.message.text.toString())
                setResult(RESULT_OK, intent)
                finish()
            }
        }
    }
}
728x90
250x250
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Total
Today
Yesterday