Android Application

Kotlin 인텐트(intent) : 암시적 인텐트 (Implicit Intent)-Data 전달하기

작성자 임베디드코리아 작성일23-10-23 22:55 조회1,553회 댓글0건

첨부파일

Kotlin 인텐트(intent) : 암시적 인텐트 (Implicit Intent)-Data 전달하기
메인 Activity에서 Second Activity로 데이터 전달하기
-------------------------------------------------------------------------------------
      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">

    <EditText
        android:id="@+id/editText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:layout_marginStart="20dp"
        android:layout_marginTop="100dp"
        android:layout_marginEnd="20dp"
        android:hint="텍스트를 입력하세요"
        app:layout_constraintBottom_toTopOf="@+id/GoSecondActivityBTN"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/GoSecondActivityBTN"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="400dp"
        android:text="Go SecondActivity"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

-------------------------------------------------------------------------------------
*****      activity_second.xml **
--- res/layout 에서  ---> New  --> Layout Resource File
--- File : activity_sub  ,  Source set : main
-------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/reciveData"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"/>

    <Button
        android:id="@+id/ReturnBTN"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="돌아가기" />
</LinearLayout>

------------------------------------------------------------------------------------
    MainActivity.kt
------------------------------------------------------------------------------------
class MainActivity : AppCompatActivity() {
    private lateinit var SecondActivityBTN: Button
    private lateinit var messageET: EditText

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

        title ="암시적 인텐트 호출"

        SecondActivityBTN = findViewById(R.id.GoSecondActivityBTN)
        messageET = findViewById(R.id.editText)

        SecondActivityBTN.setOnClickListener {
            val intent = Intent( "intent.implicit.second")
            intent.putExtra("KEY",messageET.text.toString())
            //intent.putExtra("KEY", "쫓기는 짐승이 되지 말고, 싸우는 영웅이 되자 !")
            startActivity(intent)
        }

        messageET.setOnClickListener  {
            messageET.setText(null)
        }

    }
}

------------------------------------------------------------------------------------
*****    SecondActivity.kt **
-- New --> Kotlin Class/File
-- Name : SecondActivity
------------------------------------------------------------------------------------
class SecondActivity: AppCompatActivity() {
    private lateinit var btnReturn: Button
    private lateinit var textView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)

        title = "암시적 Second 액티비티"

        btnReturn = findViewById<Button>(R.id.ReturnBTN)
        textView = findViewById<TextView>(R.id.reciveData)

        var ReciveMSG = this.intent.getStringExtra("KEY") //전송부의 키값의 value를 가져온다.
        Toast.makeText(applicationContext, "메인로 부터 데이터를 받았습니다.", Toast.LENGTH_LONG).show()
        textView.text="$ReciveMSG"

        btnReturn.setOnClickListener {

            //setResult(2900)
            finish()

        }

    }
}

------------------------------------------------------------------------------------
    themes.xml
------------------------------------------------------------------------------------
<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Base.Theme.ImplicitIntentAtivityData" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">#2196F3</item>
        <item name="colorPrimaryDark">#FFC107</item>
    </style>

    <style name="Theme.ImplicitIntentAtivityData" parent="Base.Theme.ImplicitIntentAtivityData" />
</resources>

------------------------------------------------------------------------------------
    AndroidManifest.xml
------------------------------------------------------------------------------------
        추가하기
        <activity
            android:name=".SecondActivity"
            android:exported="true" >
            <intent-filter>
                <action android:name="intent.implicit.second" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>