[안드로이드] 다음 화면으로 넘어가기 & 다음 화면에게 데이터 넘겨주기

2022. 5. 9. 00:58·안드로이드
728x90
반응형

MainActivty에서 특정 ImageView를 클릭하면 다음 화면으로 넘어간다고 하겠습니다.

 

XML은 다음과 같습니다.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/image1"
            android:src="@drawable/image1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:contentDescription="@string/app_name" />
    </LinearLayout>
</LinearLayout>

우선 MainActivity에서 XML에 있는 ImageView의 아이디를 찾아 객체로 가져오겠습니다.

 

package com.example.test

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val image1 = findViewById<ImageView>(R.id.image1)
    }
}

ImageView형을 가진 객체를 findViewById함수를 통해 가져오며, 인자로는 XML에 적힌 아이디를 R.id에서 자동완성 혹은 직접 입력하시면 가져올 수 있습니다.

 

 

가져온 ImageView 객체에는 setOnClickListener가 있고, 메서드 이름대로 클릭했을 때 어떤 동작을 할 것인지를 정의해줄 수 있는 setter입니다.

 

사진을 클릭했을 때, 다음으로 넘어갈 화면의 이름인 "ImageInsideActivity"를 Intent를 통해 객체로 가져오는 동작을 setOnClickListener 내부에 적어주겠습니다. (setOnClickListener는 "()" 가 아닌 "{}"로 열어줌을 주의하세요.)

 

package com.example.test

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val image1 = findViewById<ImageView>(R.id.image1)

        image1.setOnClickListener {
            val intent = Intent(this, ImageInsideActivity::class.java)
        }
    }
}

다음 화면으로 넘어가기 위해 startActivity 함수의 인자로 intent를 넣어주면 사진을 클릭했을 때 다음 화면으로 넘어가게 됩니다.

 

package com.example.test

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        val image1 = findViewById<ImageView>(R.id.image1)

        image1.setOnClickListener {
            val intent = Intent(this, ImageInsideActivity::class.java)
            startActivity(intent)
        }
    }
}

위 코드를 실행해보면 잘 넘어감을 확인할 수 있습니다.


다음 화면에게 데이터를 전달할 때는 intent의 putExtra 메서드를 사용합니다.

 

"data"라는 이름과 "1"이라는 값을 가진 데이터를 다음 화면에게 넘겨주겠습니다.

 

package com.example.test

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        val image1 = findViewById<ImageView>(R.id.image1)

        image1.setOnClickListener {
            val intent = Intent(this, ImageInsideActivity::class.java)
            intent.putExtra("data", "1")
            startActivity(intent)
        }
    }
}

startActivity를 실행하기 전에 넘길 데이터를 정의해야함을 주의하세요.

 

다음 화면에 해당하는 "ImageInsideActivity"에서 데이터를 받아 1번에 해당하는 사진을 화면에 출력하는 코드를 작성해보겠습니다.

 

우선 ImageInsideActivity"의 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=".ImageInsideActivity">

    <ImageView
        android:id="@+id/ImageArea"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ImageView>

</androidx.constraintlayout.widget.ConstraintLayout>

 

다음으로 "data"라는 이름의 데이터를 받고, ImageView에 특정 사진을 출력하는 코드를 작성하겠습니다.

 

데이터를 받을 때는 넘겼던 데이터의 형이 무엇인지를 알아야합니다.

 

"1"이라는 문자열을 putExtra메서드로 보냈기 때문에 string형의 데이터를 받는 메서드를 사용해야합니다.

 

이는 intent의 getStringExtra메서드를 사용해야합니다. 인자로는 데이터의 이름인 "data"를 넣어줍니다.

package com.example.test

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageView

class ImageInsideActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_image_inside)

        val getData = intent.getStringExtra("data")
    }
}

 

getData에는 "1"이라는 string 값이 들어있습니다.

 

이제 들어온 값이 "1"이면 ImageView에서 특정 이미지를 출력하는 코드를 작성해야합니다.

 

ImageView는 findViewById로 가져옴을 이미 해봤습니다.

 

가져온 ImageView 객체에서 setImageResource를 통해 특정 이미지를 넣어보겠습니다.

 

package com.example.test

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageView

class ImageInsideActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_image_inside)

        val getData = intent.getStringExtra("data")
        val memberImage = findViewById<ImageView>(R.id.ImageArea)

        if (getData == "1") memberImage.setImageResource(R.drawable.image1)
    }
}

문제없이 실행되는 것을 볼 수 있습니다.

'안드로이드' 카테고리의 다른 글

[안드로이드] ListView 구현하기  (0) 2022.05.11
[안드로이드] DataBinding 으로 TextView 업데이트 하기  (0) 2022.05.10
[안드로이드] 타이틀 바 없애기  (0) 2022.05.08
[안드로이드] 처음 시작하는 화면 설정하기 & 일정 시간 delay 준 후 특정 코드 실행시키기  (0) 2022.05.08
[안드로이드] Android Studio와 스마트폰 무선 연결  (0) 2022.05.08
'안드로이드' 카테고리의 다른 글
  • [안드로이드] ListView 구현하기
  • [안드로이드] DataBinding 으로 TextView 업데이트 하기
  • [안드로이드] 타이틀 바 없애기
  • [안드로이드] 처음 시작하는 화면 설정하기 & 일정 시간 delay 준 후 특정 코드 실행시키기
uinone
uinone
노는 게 제일 좋아😉
  • uinone
    ideaDummy
    uinone
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS
        • 확률과 통계
        • 자료구조
        • 논리회로
        • OS
        • 데이터 통신
        • 데이터 과학
        • 컴파일러
      • 알고리즘
        • 그리디
      • 컴퓨터 비전
      • 안드로이드
      • Web
        • CSS
        • TypeScript
        • React.js
      • 기타
        • 모각코
        • 메모장
        • 오류해결
        • 풍미박산 기절초풍 설치과정
      • DL
      • ML
      • 언어
        • C
        • Ocaml
      • Tensorflow
      • 8기 글로벌 SW*AI인재 프로그램
      • 논문 정리
        • 3D Object Detection
        • 3D Multi Object Tracking
      • CUDA
      • Dataset
        • NuScenes
  • 블로그 메뉴

    • LinkedIn
    • Github
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    정렬
    NetworkFlow
    그리디 알고리즘
    백준
    우선순위 큐
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
uinone
[안드로이드] 다음 화면으로 넘어가기 & 다음 화면에게 데이터 넘겨주기
상단으로

티스토리툴바