ওভারভিউ
এই উদাহরণটি দেখায় কিভাবে কোটলিনে একটি ড্রয়েবল রিসোর্স (R.drawable.xxx) ইন্টেন্ট এক্সট্রা হিসেবে পাস করে দ্বিতীয় এক্টিভিটিতে প্রদর্শন করা যায়। এতে রিসোর্স আইডি (Integer) পাস করা হয়, নাকি Bitmap অবজেক্ট (যা বড় এবং Parcelable সীমাবদ্ধতা এড়াতে)।
পূর্বশর্ত
- অ্যান্ড্রয়েড স্টুডিও (কোটলিন)
- Intent, Bundle, startActivity বেসিক
ধাপ ১: প্রজেক্ট তৈরি করুন
File → New Project → Empty Activity → Language: Kotlin।
ধাপ ২: মেইন লেআউট (res/layout/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="50dp"
android:text="Tutorials Point"
android:textAlignment="center"
android:textColor="@android:color/holo_green_dark"
android:textSize="32sp"
android:textStyle="bold" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Transfer Drawable to 2nd Activity" />
</RelativeLayout>
ধাপ ৩: MainActivity.kt
package com.example.passdrawable
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
val button: Button = findViewById(R.id.button)
button.setOnClickListener {
val intent = Intent(this@MainActivity, NewActivity::class.java)
// ড্রয়েবল রিসোর্স আইডি পাস করুন (Integer)
intent.putExtra("picture", R.drawable.ic_baseline_directions_walk_24)
startActivity(intent)
}
}
}
ধাপ ৪: দ্বিতীয় এক্টিভিটি তৈরি করুন
NewActivity.kt
package com.example.passdrawable
import android.os.Bundle
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
class NewActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_new)
title = "KotlinApp"
val imageView: ImageView = findViewById(R.id.imageView)
val bundle = intent.extras
if (bundle != null) {
val pictureResId = bundle.getInt("picture")
imageView.setImageResource(pictureResId)
}
}
}
activity_new.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=".NewActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="25sp"
android:text="Second Activity"
android:textSize="16sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
</RelativeLayout>
ধাপ ৫: AndroidManifest.xml (দ্বিতীয় এক্টিভিটি ডিক্লেয়ার করুন)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.passdrawable">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".NewActivity" />
</application>
</manifest>
চলান ও ফলাফল
- মেইন এক্টিভিটিতে "Transfer..." বাটনে ক্লিক করুন।
- দ্বিতীয় এক্টিভিটি খুলবে এবং আইকন/ইমেজ দেখাবে।
কেন রিসোর্স আইডি (Int) পাস করা ভালো?
| পদ্ধতি | সাইজ | Parcelable লিমিট | পারফরম্যান্স |
|---|---|---|---|
| Resource ID (Int) | 4 বাইট | নहीं | তেজ |
| Bitmap (Parcelable) | বড় (MB-এ) | হ্যাঁ (1MB লিমিট) | ধীর, OOM রিস্ক |
| ByteArray (Base64) | বড় | হ্যাঁ | ধীর |
| File URI / Content URI | ছোট | না | ভালো (ContentProvider দরকার) |
বিকল্প: Bitmap পাস করতে হলে (ছোট ইমেজের জন্য)
// পাঠানোর taraf
val bitmap = BitmapFactory.decodeResource(resources, R.drawable.image)
intent.putExtra("bitmap", bitmap) // Parcelable
// পাওয়ার taraf
val bitmap = intent.getParcelableExtra("bitmap")
imageView.setImageBitmap(bitmap)
সতর্কতা: শুধু ছোট ইমেজ (আইকন, থাম্বনেইল) এর জন্য। বড় ফটোর জন্য URI/ContentProvider ব্যবহার করুন।
উন্নত: ContentProvider ব্যবহার (বड़े ফাইল/শেয়ারিং)
FileProvider সেটআপ করে content:// URI পাস করুন - সিকিউর এবং স্কেলেবল।