ওভারভিউ
এই উদাহরণটি একটি কাস্টম Character অবজেক্ট (নাম, পেশা, পজিশন, অভিযোগ্যতা) Serializable করে দিয়ে পাস করার পদ্ধতি দেখায়।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি
ধাপ ২: activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:background="#008080"
android:padding="5dp"
android:text="TutorialsPoint"
android:textColor="#fff"
android:textSize="24sp"
android:textStyle="bold" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Click here to pass object to Second Activity!" />
</RelativeLayout>
ধাপ ৩: MainActivity.kt
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import java.io.Serializable
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "Object Pass Demo"
val button = findViewById<Button>(R.id.button)
button.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
// Character অবজেক্ট তৈরি
val sports = Character(
name = "CR7",
profession = "Football",
position = "Left Winger",
abilities = arrayOf("Best player in the World")
)
intent.putExtra("Character", sports)
startActivity(intent)
}
}
}
// Serializable ডেটা ক্লাস
data class Character(
var name: String,
var profession: String,
var position: String,
var abilities: Array<String>
) : Serializable
ধাপ ৪: SecondActivity তৈরি
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:background="#008080"
android:padding="5dp"
android:text="TutorialsPoint"
android:textColor="#fff"
android:textSize="24sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textColor="@color/colorPrimaryDark"
android:textSize="24sp"
android:textStyle="bold" />
</RelativeLayout>
SecondActivity.kt
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
title = "Received Object"
val sports = intent.getSerializableExtra("Character") as Character?
val textView = findViewById<TextView>(R.id.textView)
sports?.let {
textView.text = """
${it.name}
${it.profession}
${it.position}
${it.abilities.contentToString()}
""".trimIndent()
}
}
}
⚡ উন্নত পদ্ধতি: @Parcelize (দ্রুত এবং আধুনিক)
build.gradle.kts এ kotlin-parcelize প্লাগইন যোগ করুন:
plugins {
id("kotlin-parcelize")
}
পার্সেলেবল ডেটা ক্লাস:
@Parcelize
data class Character(
val name: String,
val profession: String,
val position: String,
val abilities: Array<String>
) : Parcelable
MainActivity-এ:
intent.putExtra("Character", sports) // অটোমেটিক Parcelable হ্যান্ডেল
SecondActivity-এ:
val sports = intent.getParcelableExtra<Character>("Character")
Parcelable vs Serializable
| ফিচার | Serializable | Parcelable (@Parcelize) |
|---|---|---|
| স্পিড | ধীর (রিফ্লেকশন) | দ্রুত (নেটিভ) |
| কোড জটিলতা | সহজ | অটোমেটিক (এনটেশন) |
| গার্বেজ | বেশি | কম |
| সুপারিশ | লিগ্যাসি/সিম্পল | ✅ আধুনিক অ্যাপের জন্য |
বড় ডেটার জন্য বিকল্প
- ViewModel + LiveData/Flow - শেয়ার্ড ইউআই স্টেট
- Room Database - পারসিস্টেন্ট স্টোরেজ
- DataStore/SharedPreferences - ছোট কনফিগ ডেটা