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

অ্যান্ড্রয়েডে একটি অবজেক্ট এক এক্টিভিটি থেকে অন্য একে পাস করার পদ্ধতি

Serializable / Parcelable ব্যবহার করে অবজেক্ট পাস করুন

এই টিউটোরিয়ালে দেখানো হয়েছে কিভাবে একটি কাস্টম অবজেক্ট (Model Class) একটি এক্টিভিটি থেকে অন্য একটিতে Intent-এর মাধ্যমে পাস করা যায়।

ধাপ ১: প্রজেক্ট তৈরি

ধাপ ২: লেআউট (MainActivity)

<?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">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click here to pass object to Second Activity!"
        android:id="@+id/button"
        android:layout_centerInParent="true" />
</RelativeLayout>

ধাপ ৩: মডেল ক্লাস (Serializable)

Character.java:

import java.io.Serializable;

public class Character implements Serializable {
    String name, profession, position;
    String[] abilities;
    
    public Character(String name, String profession, String position, String[] abilities) {
        this.name = name;
        this.profession = profession;
        this.position = position;
        this.abilities = abilities;
    }
}

ধাপ ৪: MainActivity.java (পাঠানো)

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button button = findViewById(R.id.button);
        button.setOnClickListener(v -> {
            Intent intent = new Intent(this, SecondActivity.class);
            
            Character sports = new Character(
                "CR7", "Football", "Left Winger", 
                new String[]{"Best Free kicker in the World"}
            );
            
            intent.putExtra("Character", sports);
            startActivity(intent);
        });
    }
}

ধাপ ৫: SecondActivity.java (গ্রহণ)

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.util.Arrays;

public class SecondActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        
        Character sports = (Character) getIntent().getSerializableExtra("Character");
        
        TextView textView = findViewById(R.id.textView);
        textView.setText(sports.name + "\n" + sports.profession + "\n" 
            + sports.position + "\n" + Arrays.toString(sports.abilities));
    }
}

ধাপ ৬: SecondActivity লেআউট

<?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:id="@+id/textView"
        android:textSize="20sp"
        android:layout_centerInParent="true"/>
</RelativeLayout>

Serializable vs Parcelable

বিষয়SerializableParcelable
সহজতাখুব সহজ (implements Serializable)কোড বেশি লাগে (writeToParcel, CREATOR)
পারফরম্যান্সधीম (রিফ্লেকশন ব্যবহার)তেজ (অ্যান্ড্রয়েডের জন্য অপ্টিমাইজড)
গারবেজঅতিরিক্ত অবজেক্ট তৈরি করেকম গারবেজ
সুপারিশসিম্পল ডেটা, দ্রুত প্রোটোটাইপপ্রোডাকশন অ্যাপ, বড় ডেটা

Parcelable উদাহরণ (Kotlin - অটো জেনারেট)

@Parcelize
data class Character(
    val name: String,
    val profession: String,
    val position: String,
    val abilities: Array
) : Parcelable

Java-এ Parcelable (ম্যানুয়াল)

public class Character implements Parcelable {
    // ফিল্ড, কনস্ট্রাক্টর...
    
    protected Character(Parcel in) {
        name = in.readString();
        profession = in.readString();
        position = in.readString();
        abilities = in.createStringArray();
    }
    
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(profession);
        dest.writeString(position);
        dest.writeStringArray(abilities);
    }
    
    public static final Creator CREATOR = new Creator() {
        @Override public Character createFromParcel(Parcel in) { return new Character(in); }
        @Override public Character[] newArray(int size) { return new Character[size]; }
    };
    
    @Override public int describeContents() { return 0; }
}

বড় ডেটার জন্য বিকল্প

  • ViewModel / SharedViewModel - এক্টিভিটি/ফ্র্যাগমেন্টের মাঝপথে ডেটা শেয়ার
  • Room Database - পার্সিস্টেন্ট স্টোরেজ
  • DataStore / SharedPreferences - ছোট ডেটা
  • Application ক্লাস - গ্লোবাল স্টেট (সতর্কতার সাথে)
  1. অ্যান্ড্রয়েডে এক্টিভিটির থেকে ফ্র্যাগমেন্টে ভেরিয়েবল পাস করার পদ্ধতি

  2. অ্যান্ড্রয়েডে ফ্র্যাগমেন্ট থেকে এক্টিভিটি মেথড কল করা

  3. অ্যান্ড্রয়েডে একটি ইমেজ এক्टीভিটি থেকে অন্য এক्टीভিটিতে পাস করার পদ্ধতি

  4. Android-এ একটি ফ্র্যাগমেন্ট থেকে অন্য ফ্র্যাগমেন্টে ডেটা পাস করার পদ্ধতি