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 |