ABOUT ME

Today
Yesterday
Total
  • [android] android 액티비티와 인텐트
    app/android 2022. 1. 13. 19:53
    반응형

     

     

     

     

     

     

     

     

    안드로이드 4대 컴포넌트

     

    액티비티, 서비스, 브로드캐스트 리시버, 콘텐트 프로바이더

     

    액티비티(Activity)

    화면을 구성하는 가장 기본적인 컴포넌트

    지금까지 계속 액티비티를 이용하여 앱을 작성함

     

    서비스(Service)

    눈에 보이는 화면(액티비티)과 상관없이 백그라운드에서 동작하는 컴포넌트

    로컬에서 동작하는 서비스는 아래 세 단계를 거친다

     

    서비스 생성 -> 시작 -> 종료

     

    브로드캐스트 리시버(Broadcast Receiver)

    안드로이드는 여러 응용 프로그램이나 장치에 메시지를 전달하기 위해 방송

    메시지를 사용함

     

    콘텐트 프로바이더(content provider)

    응용 프로그램 사이에 데이터를 공유하기 위한 컴포넌트

    자신의 데이터를 외부에 공개하려면 콘텐트 프로바이더를 만들어야한다

     

     

    액티비티의 개요

     

    안드로이폰에 나타나는 화면 하나하나

    가장 핵심적인 내용이다

     

     

     

    <실습> 새로운 액티비티 추가하기

     

     

    activity_main.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"
        android:orientation="vertical"
        tools:context=".MainActivity">
    
    
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="첫번째 화면" />
    
        <Button
            android:id="@+id/btnNew"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="새화면 열기" />
    
    </LinearLayout>

     

    second.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"
        android:orientation="vertical"
        android:background="#00ff00"
        tools:context=".SecondActivity">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="두번째 화면" />
    
        <Button
            android:id="@+id/btnRetrun"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="되돌아 가기" />
    
    </LinearLayout>

     

    MainActivity.kt

     

    package com.cookandroid.project10_1
    
    import android.content.Intent
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import kotlinx.android.synthetic.main.activity_main.*
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            btnNew.setOnClickListener {
    
                var intent = Intent(applicationContext, SecondActivity::class.java)
                this.startActivity(intent)
            }
        }
    }

     

    SecondActivity.kt

     

     

    package com.cookandroid.project10_1
    
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import kotlinx.android.synthetic.main.second.*
    
    class SecondActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.second)
    
            btnRetrun.setOnClickListener {
                this.finish()
            }
        }
    }

     

     

    실행결과

     

     

     

    첫번째 화면

     

     

     

    >>>

     

     

    버튼 클릭 시 두번째 화면으로 옮겨 간 것을 확인할 수 있다!!!

     

     

     

     

     

     

     

     

    명시적인텐트

     

    인텐트

     

    안드로이드의 4대 컴포넌트가 서로 데이터를 주고받기 위한 메시지 객체

    명시적 인텐트와 암시적 인텐트로 구분된다

     

    데이터 전달 ->

    var intent = Intent(applicationContext, SecondActivity::class.java)

     

     

     

    <실습> 영화 선호도 투표

     

     

     

    activity_main.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"
        android:orientation="vertical"
        tools:context=".MainActivity">
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="3">
    
            <ImageView
                android:id="@+id/iv1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:src="@drawable/pic1" />
    
            <ImageView
                android:id="@+id/iv2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:src="@drawable/pic2" />
    
            <ImageView
                android:id="@+id/iv3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:src="@drawable/pic3" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="3">
    
            <ImageView
                android:id="@+id/iv4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:src="@drawable/pic4" />
    
            <ImageView
                android:id="@+id/iv5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:src="@drawable/pic5" />
    
            <ImageView
                android:id="@+id/iv6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:src="@drawable/pic6" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="3">
    
            <ImageView
                android:id="@+id/iv7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:src="@drawable/pic7" />
    
            <ImageView
                android:id="@+id/iv8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:src="@drawable/pic8" />
    
            <ImageView
                android:id="@+id/iv9"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:src="@drawable/pic9" />
        </LinearLayout>
    
        <Button
            android:id="@+id/btn1"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:text="투표종료" />
    
    
    </LinearLayout>

     

     

    result.xml

     

    <?xml version="1.0" encoding="utf-8"?>
    <TableLayout 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"
        android:gravity="center_vertical"
        tools:context=".ResultActivity">
    
        <TableRow>
            <TextView
                android:id="@+id/textv1"
                android:layout_gravity="center_vertical"
                android:text="그림1"
                android:textSize="15dp" />
    
            <RatingBar
                android:id="@+id/rbar1"
                style="?android:attr/ratingBarStyleIndicator"
                android:layout_gravity="right" />
        </TableRow>
    
        <TableRow>
            <TextView
                android:id="@+id/textv2"
                android:layout_gravity="center_vertical"
                android:text="그림2"
                android:textSize="15dp" />
    
            <RatingBar
                android:id="@+id/rbar2"
                style="?android:attr/ratingBarStyleIndicator"
                android:layout_gravity="right" />
        </TableRow>
    
        <TableRow>
            <TextView
                android:id="@+id/textv3"
                android:layout_gravity="center_vertical"
                android:text="그림3"
                android:textSize="15dp" />
    
            <RatingBar
                android:id="@+id/rbar3"
                style="?android:attr/ratingBarStyleIndicator"
                android:layout_gravity="right" />
        </TableRow>
    
        <TableRow>
            <TextView
                android:id="@+id/textv4"
                android:layout_gravity="center_vertical"
                android:text="그림4"
                android:textSize="15dp" />
    
            <RatingBar
                android:id="@+id/rbar4"
                style="?android:attr/ratingBarStyleIndicator"
                android:layout_gravity="right" />
        </TableRow>
    
        <TableRow>
            <TextView
                android:id="@+id/textv5"
                android:layout_gravity="center_vertical"
                android:text="그림5"
                android:textSize="15dp" />
    
            <RatingBar
                android:id="@+id/rbar5"
                style="?android:attr/ratingBarStyleIndicator"
                android:layout_gravity="right" />
        </TableRow>
    
        <TableRow>
            <TextView
                android:id="@+id/textv6"
                android:layout_gravity="center_vertical"
                android:text="그림6"
                android:textSize="15dp" />
    
            <RatingBar
                android:id="@+id/rbar6"
                style="?android:attr/ratingBarStyleIndicator"
                android:layout_gravity="right" />
        </TableRow>
    
        <TableRow>
            <TextView
                android:id="@+id/textv7"
                android:layout_gravity="center_vertical"
                android:text="그림7"
                android:textSize="15dp" />
    
            <RatingBar
                android:id="@+id/rbar7"
                style="?android:attr/ratingBarStyleIndicator"
                android:layout_gravity="right" />
        </TableRow>
    
        <TableRow>
            <TextView
                android:id="@+id/textv8"
                android:layout_gravity="center_vertical"
                android:text="그림8"
                android:textSize="15dp" />
    
            <RatingBar
                android:id="@+id/rbar8"
                style="?android:attr/ratingBarStyleIndicator"
                android:layout_gravity="right" />
        </TableRow>
    
        <TableRow>
            <TextView
                android:id="@+id/textv9"
                android:layout_gravity="center_vertical"
                android:text="그림9"
                android:textSize="15dp" />
    
            <RatingBar
                android:id="@+id/rbar9"
                style="?android:attr/ratingBarStyleIndicator"
                android:layout_gravity="right" />
        </TableRow>
    
    
    
        <Button
            android:id="@+id/btnReturn"
            android:layout_span="2"
            android:text="돌아가기" />
    
    </TableLayout>

     

    MainActivity.kt

     

    버튼의 intent 사용 예시를 주의깊게 보자

     

    package com.cookandroid.project10_2
    
    import android.content.Intent
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import android.widget.ImageView
    import android.widget.Toast
    import kotlinx.android.synthetic.main.activity_main.*
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            this.title = "영화선호도 투표"
    
            var voteCount = IntArray(9)
            for (i in 0..8)
                voteCount[i] = 0
    
            var image = arrayOfNulls<ImageView>(9)
    
            var imageV = arrayOf(iv1, iv2, iv3, iv4, iv5, iv6, iv7, iv8, iv9)
            var imgName = arrayOf(
                "독서하는 소녀", "    꽃장식 모자 소녀", "부채를 든 소녀",
                "이래느깡 단 베르앙", "잠자는 소녀", "테라스의 두자매", "피아노 레슨", "피아노 앞의 소녀들", "해변에서"
            )
    
            for (i in imageV.indices) {
                imageV[i]!!.setOnClickListener {
                    voteCount[i]++
                    Toast.makeText(
                        applicationContext,
                        imgName[i] + "총 " + voteCount[i] + "표 ",
                        Toast.LENGTH_LONG
                    ).show()
                }
            }
            btn1.setOnClickListener {
                var intent1 = Intent(applicationContext, ResultActivity::class.java)
                intent1.putExtra("voteCount", voteCount)
                intent1.putExtra("imageName", imgName)
                this.startActivity(intent1)
            }
        }
    }

     

     

    ResultActivity.kt

     

     

    package com.cookandroid.project10_2
    
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import android.widget.ImageView
    import kotlinx.android.synthetic.main.result.*
    
    class ResultActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.result)
    
            this.title = "투표결과"
    
            var intent1 = this.getIntent()
            var voteResult = intent1.getIntArrayExtra("voteCount")
            var imageName = intent1.getStringArrayExtra("imageName")
    
            var textV = arrayOf(textv1, textv2, textv3, textv4, textv5, textv6, textv7, textv8, textv9)
            var rbar = arrayOf(rbar1, rbar2, rbar3, rbar4, rbar5, rbar6, rbar7, rbar8, rbar9)
    
            for(i in voteResult.indices){
                textV[i].setText(imageName!![i])
                rbar[i].rating = voteResult[i].toFloat()
            }
    
            btnReturn.setOnClickListener {
                this.finish()
            }
        }
    }

     

     

     

    실행결과

     

     

     

     

    >>

     

    투표결과

     

     

     

     

    요로코롬 끝~~~

    반응형

    댓글

Designed by Tistory.