Tutorial Passing Data Antar Activity dengan Kotlin Android Menggunakan Intent dan Bundle

Halo semuanya, setelah sebelumnya saya memposting cara berpindah dari satu Activity ke Activity lainnya di Android menggunakan Kotlin, kali ini kita akan mengembangkan konsep yang sama yaitu berpindah dari satu Activity ke Activity lain namun kita akan mempassing data String saat kita pindah Activity menggunakan Bundle dan Intent. Bagaimana caranya? Mari kita simak tutorial di bawah ini.

Mengirim data dari satu Activity ke Activity lain di Android dengan Kotlin

Di Android, passing data antar Activity ada dua cara, yaitu menggunakan Intent, dan menggunakan Bundle. Data yang akan dikirim pun tipenya bisa bermacam-macam, bisa berbentuk String, angka (integer, float, double), ArrayList, boolean, array, character, dan sebagainya. Namun tidak semua tipe data support untuk dikirim antar Activity, tipe data yang berukuran besar seperti gambar (image bitmap) atau file, tidak bisa dipassing antar Activity melalui metode ini.

Oke langsung saja, sebelum memulai tutorial ini sebelumnya ada beberapa tutorial yang harus kalian baca.

Pre-requisites :

Mengirim Data Antar Activity menggunakan Bundle di Android Kotlin

Pertama-tama kita akan belajar mengirim data antar Activity menggunakan Bundle. Tidak jauh berbeda dengan Java, pada Kotlin kodenya sebagai berikut :

            val bundle = Bundle()
            bundle.putString("data1", etData1.text.toString())
            bundle.putString("data2", etData2.text.toString())

            val intent = Intent(this, TWOHKotlinActivity4::class.java)
            intent.putExtras(bundle)
            startActivity(intent)

Bisa dilihat pada kode di atas, basically Bundle itu berperan sebagai sebuah bungkusan, yang berisi data kita di dalamnya. Kita memasukkan data yang ingin kita kirim ke dalam sebuah Bundle, dan disertai key untuk menandai data yang mana pada saat pengambilan data. Kemudian baru setelah itu kita kirimkan Bundle tersebut ke Activity lain menggunakan Intent.

Keuntungan mengirim data lewat Bundle adalah, data lebih rapi dan terstruktur karena sebelumnya dikemas di dalam Bundle terlebih dahulu, sebelum dikirim.

Mengirim Data Antar Activity lewat Intent di Android

Cara kedua adalah mengirimkannya langsung menggunakan Intent. Pada cara kedua ini data tersebut tidak dibungkus di dalam Bundle terlebih dahulu, melainkan langsung diikutsertakan di Intent dalam bentuk extra.

Menggunakan Kotlin, konsepnya sama, kita memasukkan data langsung ke dalam Intent dalam bentuk key value pair.

            val intent = Intent(this, TWOHKotlinActivity4::class.java)
            intent.putExtra("data1", etData1.text.toString())
            intent.putExtra("data2", etData2.text.toString())
            startActivity(intent)

Pada kode di atas, beda dengan Java, di Kotlin tidak ada keyword new saat inisialisasi variable, begitu juga dengan awalan kita menggunakan keyword val bukan var, karena variable yang kita gunakan adalah local variable/bukan global variable, immutable dan hanya bisa kita assign sekali saja.

Contoh Penerapan

Di tutorial ini, nanti kita akan membuat aplikasi Android dengan dua Activity. Activity pertama akan mempunyai EditText dimana kita bisa menginputkan data String di dalamnya. Kemudian apabila kita klik tombol Submit, maka akan terbuka Activity kedua dan akan menampilkan data String yang kita inputkan di Activity pertama.

Kita akan buat dua buah layout XML, activity_main.xml dan activity_second.xml.

Isikan kode berikut pada activity_main.xml :

<?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:gravity="center_horizontal"
    android:orientation="vertical">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ini halaman utama Activity 1"
        android:textAppearance="?android:attr/textAppearanceLarge" />
 
        <EditText
            android:id="@+id/et_data1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Data 1" />
 
        <EditText
            android:id="@+id/et_data2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Data 2" />
 
    <Button
        android:id="@+id/bt_submit"
        android:text="Submit Data using Bundle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
 
    <Button
        android:id="@+id/bt_submitintent"
        android:text="Submit Data using Intent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

Kemudian XML layout pada activity_second.xml :

<?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:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ini halaman kedua Activity 2"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/tv_data1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="15dp"
        android:text="Data 1"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/tv_data2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="15dp"
        android:text="Data 2"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

Pada file java nya, MainActivity berperan sebagai Activity pertama. Buka MainActivity.java, dan isikan kode berikut :

package co.twoh.kotlin.twohkotlin

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.widget.Button
import android.widget.EditText

class MainActivity : AppCompatActivity() {

    private lateinit var etData1 : EditText
    private lateinit var etData2 : EditText
    private lateinit var btSubmit : Button
    private lateinit var btSubmitIntent : Button

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

        etData1 = findViewById(R.id.et_data1)
        etData2 = findViewById(R.id.et_data2)
        btSubmit = findViewById(R.id.bt_submit)
        btSubmitIntent = findViewById(R.id.bt_submitintent)

        btSubmit.setOnClickListener {

            /**
             * Move ke activity selanjutnya dengan
             * passing data menggunakan Bundle
             */
            val bundle = Bundle()
            bundle.putString("data1", etData1.text.toString())
            bundle.putString("data2", etData2.text.toString())

            val intent = Intent(this, ActivitySecond::class.java)
            intent.putExtras(bundle)
            startActivity(intent)
        }

        btSubmitIntent.setOnClickListener{
            /**
             * Move ke activity selanjutnya dengan
             * passing data menggunakan Intent
             */
            val intent = Intent(this, ActivitySecond::class.java)
            intent.putExtra("data1", etData1.text.toString())
            intent.putExtra("data2", etData2.text.toString())
            startActivity(intent)
        }

    }
}
Kemudian pada ActivitySecond.java berperan sebagai Activity kedua yang akan menampilkan data yang dikirim dari MainActivity, isikan kode berikut pada ActivitySecond.java :

package co.twoh.kotlin.twohkotlin

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.widget.TextView

class ActivitySecond : AppCompatActivity(){

    private lateinit var tvData1 : TextView
    private lateinit var tvData2 : TextView

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

        tvData1 = findViewById(R.id.tv_data1)
        tvData2 = findViewById(R.id.tv_data2)
        
        if(intent.extras != null)
        {
            val bundle = intent.extras
            tvData1.setText(bundle.getString("data1"))
            tvData2.setText(bundle.getString("data2"))
        }else{
            tvData1.setText(intent.getStringExtra("data1"))
            tvData2.setText(intent.getStringExtra("data2"))
        }
    }

}

Pada ActivitySecond inilah, terdapat fungsi untuk mengambil data dari Bundle, dan dari Intent extras menggunakan key yang sudah kita define sebelumnya. Contohnya bisa langsung dilihat pada kode di atas. Setelah itu jangan lupa untuk daftarkan dua kelas tersebut di AndroidManifest seperti tutorial sebelumnya.

Demo

Jika sudah, bisa langsung kita demokan aplikasinya.

Android Kotlin Activity Bundle Sample

Android Kotlin Activity Bundle Sample

Bisa dilihat pada gambar di atas. Sebelah kiri adalah tempat dimana kita menginputkan data berupa string, dan ketika tombol Submit ditekan, maka akan berpindah ke Activity 2, dan menampilkan data sama persis seperti data yang kita kirim. 🙂

That’s all ! Semoga membantu. 🙂 Jangan lupa untuk clone project nya sebagai Android Studio module di GitHub saya, dengan terlebih dahulu follow dan star project tersebut. Silahkan bertanya di bagian komentar jika ada yang kurang jelas. 😀

 

 





Download aplikasi kami di Google Play Store


Tutorial Menarik Lainnya :

Leave a Reply