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

অ্যান্ড্রয়েডে অ্যাক্টিভিটির মাঝপথে ডেটা পাস করা: স্ট্যাটিক মেথড পদ্ধতি

এই টিউটোরিয়ালে শুধুমাত্র স্ট্যাটিক মেথড ব্যবহার করে অ্যান্ড্রয়েডের দুটি অ্যাক্টিভিটির মাঝপথে ডেটা পাস করার পদ্ধতি দেখানো হলো। এটি খুব সহজ কিন্তু প্রোডাকশন-লেভেল অ্যাপের জন্য अनुशंसিত নয়। শেখার লिहাজ থেকে এবং খুব সিম্পল ইউজ কেসের জন্য এটি উপযোগী হতে পারে।

কেন স্ট্যাটিক মেথড? (এবং কেন নয়?)

  • ✅ সহজ: কোনো এক্সট্রা বয়লারপ্লেট কোড লাগে না।
  • ✅ দ্রুত প্রোটোটাইপিং: কুইক টেস্টের জন্য ভালো।
  • ❌ মেমরি লিক: স্ট্যাটিক রেফারেন্স এক্টিভিটি ডেস্ট্রয় না হওয়ায় মেমরি লিক করে।
  • ❌ প্রসেস ডেথ: সিস্টেম প্রসেস কিল করলে ডেটা হারায়।
  • ❌ নন-লাইফসাইকেল-অয়েয়ার: কনফিগারেশন চেঞ্জ (রোটেশন) হ্যান্ডেল করে না।

ইমপ্লিমেন্টেশন স্টেপস

Step 1: নতুন প্রজেক্ট তৈরি

Android Studio → File → New Project → Empty Activity → Language: Java → Finish

Step 2: activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:layout_margin="16dp"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:hint="পাস করার টেক্সট লিখুন"
        android:inputType="text" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="16dp"
        android:text="Next" />
</LinearLayout>

Step 3: MainActivity.java

package com.example.staticdatapass;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    // প্রাইভেট স্ট্যাটিক ফিল্ড - ডেটা সংরক্ষণ করবে
    private static String dataHolder;

    // পাবলিক স্ট্যাটিক গেটার - অন্য ক্লাস থেকে এক্সেসের জন্য
    public static String getDataHolder() {
        return dataHolder;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText editText = findViewById(R.id.edit_text);
        Button button = findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // ১. ইউজার ইনপুট নিয়ে স্ট্যাটিক ফিল্ডে রাখা
                dataHolder = editText.getText().toString().trim();

                // ২. সেকেন্ড অ্যাক্টিভিটি লঞ্চ করা
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
    }
}

Step 4: activity_second.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:layout_margin="16dp"
    android:orientation="vertical"
    tools:context=".SecondActivity">

    <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textSize="20sp"
        android:gravity="center" />
</LinearLayout>

Step 5: SecondActivity.java

package com.example.staticdatapass;

import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        TextView textView = findViewById(R.id.text_view);
        
        // ৩. স্ট্যাটিক গেটার কল করে ডেটা পাওয়া
        String receivedData = MainActivity.getDataHolder();
        textView.setText(receivedData != null ? receivedData : "ডেটা পাওয়া যায়নি");
    }
}

Step 6: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.staticdatapass">

    <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>
                
                
            </intent-filter>
        </activity>

        <activity android:name=".SecondActivity" />
    </application>
</manifest>

অ্যাপটি রান করা

  1. USB ডিবাগিং অন করে ডিভাইস কানেক্ট করুন বা এমুলেটর চালু করুন।
  2. টুলবার থেকে Run (▶) আইকনে ক্লিক করুন।
  3. ডিভাইস সিলেক্ট করুন।
  4. অ্যাপ খুললে প্রথম স্ক্রিনে টেক্সট লিখুন এবং Next বাটন চাপুন।
  5. দ্বিতীয় স্ক্রিনে আপনার লিখা টেক্সট দেখাবে।

রান টাইম স্ক্রিনশট (কনসেপ্টুয়াল)

স্ক্রিন ১: EditText এবং Button আছে।
স্ক্রিন ২: TextView-এ পাস করা টেক্সট দেখাচ্ছে।

বাস্তব ব্যবহারে এই পদ্ধতি এড়িয়ে যেতে হবে কেন?

🚫 প্রধান সমস্যা:

  • যদি ইউজার হোম বাটন চাপে এবং সিস্টেম অ্যাপকে কিল করে, তখন dataHolder = null হয়ে যায়।
  • স্ক্রিন রোটেশনে MainActivity রিক্রিয়েট হলে স্ট্যাটিক ভেরিয়েবল থাকে (ক্লাস লোডার একই থাকায়), কিন্তু নতুন ইনস্ট্যান্সে পুরনো ডেটা দেখাতে পারে।
  • মাল্টি-উইন্ডো বা ফোল্ডেবল ডিভাইসের ক্ষেত্রে অনপ্রেডিক্টেবল বিহেভিয়ার।

✅ সেরা বিকল্প: Intent.putExtra()

// MainActivity-এ
intent.putExtra("my_key", "my_value");

// SecondActivity-এ
String val = getIntent().getStringExtra("my_key");

এটি সিস্টেম-লেভেলে হ্যান্ডেল হয়, প্রসেস ডেথে সারভাইভ করে (SavedStateRegistry এর মাধ্যমে), এবং টাইপ-সেফ।

সারাংশ

স্ট্যাটিক মেথড দিয়ে ডেটা পাস করা শুধুমাত্র শিক্ষামূলক উদ্দেশ্যে গ্রহণযোগ্য। যেকোনো রিয়েল অ্যাপে Intent Extras / Bundle / ViewModel ব্যবহার করুন। এই টিউটোরিয়ালটি কনসেপ্ট বুঝতে সাহায্য করবে, কিন্তু প্রোডাকশন কোডে এটি কপি-পেস্ট করবেন না।

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

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

  3. Android-এ মোবাইল ডেটা প্রোগ্রাম্যাটিকভাবে ডিজেবল/এনেবল করা

  4. Android Data Binding 습득: সুস্পষ্ট UI ডেটা ইন্টিগ্রেশন