কম্পিউটার টিউটোরিয়াল

কোটলিন ব্যবহার করে অ্যান্ড্রয়েডে ড্রয়েবল এক্টিভিটি থেকে এক্টিভিটিতে পাস করা

ওভারভিউ

এই উদাহরণটি দেখায় কিভাবে কোটলিনে একটি ড্রয়েবল রিসোর্স (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>

চলান ও ফলাফল

  1. মেইন এক্টিভিটিতে "Transfer..." বাটনে ক্লিক করুন।
  2. দ্বিতীয় এক্টিভিটি খুলবে এবং আইকন/ইমেজ দেখাবে।

কেন রিসোর্স আইডি (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 পাস করুন - সিকিউর এবং স্কেলেবল।

  1. অ্যান্ড্রয়েড SQLite-এ WHERE ক্লজ, BETWEEN এবং AND ব্যবহার করে ডেটা ফিল্টার করা

  2. অ্যান্ড্রয়েডে ফ্র্যাগমেন্টের মাঝপথে ডেটা পাস করার পদ্ধতি

  3. অ্যান্ড্রয়েডে এক্টিভিটির মাঝপথে Drawable পাস করা

  4. Android-এ বিভিন্ন অ্যাক্টিভিটির মধ্যে স্যুইচ করার পদ্ধতি