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

কোটলিন ব্যবহার করে অ্যান্ড্রয়েডে ফ্র্যাগমেন্ট থেকে এক্টিভিটি মেথড কল করার পদ্ধতি

এই উদাহরণটি দেখায় কিভাবে কোটলিন ব্যবহার করে একটি ফ্র্যাগমেন্ট থেকে এর পেরেন্ট এক্টিভিটির মেথড কল করা যায়। এটি ফ্র্যাগমেন্ট-এক্টিভিটি কমিউনিকেশনের একটি সাধারণ প্যাটার্ন।

প্রথম ধাপ: নতুন প্রজেক্ট তৈরি করুন

Android Studio-তে File → New Project এ যান এবং প্রয়োজনীয় বিবরণ পূরণ করে একটি নতুন প্রজেক্ট তৈরি করুন।

দ্বিতীয় ধাপ: মেইন এক্টিভিটি লেআউট XML ডিজাইন করুন

res/layout/activity_main.xml ফাইলে নিচের কোড যোগ করুন (FrameLayout কন্টেইনার হিসেবে):

<?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"
    android:padding="8dp"
    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" />

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

তৃতীয় ধাপ: MainActivity.kt তে ফ্র্যাগমেন্ট লোড এবং মেথড ডিফাইন করুন

src/MainActivity.kt ফাইলে নিচের কোড যোগ করুন:

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"

        // ফ্র্যাগমেন্ট লোড করুন
        val fragmentManager = supportFragmentManager
        val fragmentTransaction = fragmentManager.beginTransaction()
        fragmentTransaction.replace(R.id.frameLayout, SampleFragment()).commit()
    }

    // ফ্র্যাগমেন্ট থেকে কল হওয়া মেথড
    fun fragmentMethod() {
        Toast.makeText(this@MainActivity, "ফ্র্যাগমেন্ট থেকে মেথড কল হয়েছে", Toast.LENGTH_LONG).show()
    }
}

চতুর্থ ধাপ: ফ্র্যাগমেন্ট লেআউট XML তৈরি করুন

res/layout/fragment_sample.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=".SampleFragment">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="ফ্র্যাগমেন্ট থেকে মেথড কল করা হচ্ছে"
        android:textAlignment="center"
        android:textColor="@android:color/background_dark"
        android:textSize="24sp"
        android:textStyle="bold" />

</RelativeLayout>

পঞ্চম ধাপ: SampleFragment.kt তৈরি করুন

একটি নতুন কোটলিন ক্লাস তৈরি করুন SampleFragment.kt নামে:

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment

class SampleFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_sample, container, false)
        
        // সেফ কাস্টিং ব্যবহার করে এক্টিভিটি মেথড কল করুন
        (activity as? MainActivity)?.fragmentMethod()
        
        return view
    }
}

ষষ্ঠ ধাপ: ম্যানিফেস্ট ফাইল

androidManifest.xml ফাইলটি সাধারণ থাকবে।

বेहতর প্যাটার্ন: Interface ব্যবহার করে (Decoupled)

প্রোডাকশন কোডে টাইট কাপলিং এড়াতে Interface ব্যবহার করা ভালো:

// Interface ডিফাইন করুন
interface FragmentCommunicator {
    fun onFragmentAction(message: String)
}

// MainActivity имплемен্ট করুন
class MainActivity : AppCompatActivity(), FragmentCommunicator {
    override fun onFragmentAction(message: String) {
        Toast.makeText(this, "ফ্র্যাগমেন্ট ব बोली: $message", Toast.LENGTH_SHORT).show()
    }
}

// Fragment-এ Interface ব্যবহার করুন
class SampleFragment : Fragment() {
    private var communicator: FragmentCommunicator? = null

    override fun onAttach(context: Context) {
        super.onAttach(context)
        if (context is FragmentCommunicator) {
            communicator = context
        } else {
            throw ClassCastException("$context must implement FragmentCommunicator")
        }
    }

    override fun onDetach() {
        super.onDetach()
        communicator = null
    }

    override fun onCreateView(...): View? {
        // ...
        communicator?.onFragmentAction("হ্যালো এক্টিভিটি!")
        return view
    }
}

গুরুত্বপূর্ণ নোট

  • (activity as? MainActivity)?.fragmentMethod() - সেফ কাস্ট এবং নাল চেকের সাথে কল করুন।
  • ফ্র্যাগমেন্ট লাইফসাইকেলের কারণে onAttach()-এ কমিউনিকেটর ইনিশিয়ালাইজ করুন এবং onDetach()-এ নাল করুন।
  • Jetpack Navigation Component ব্যবহার করলে findNavController() এবং Safe Args দিয়ে ডেটা পাস করা ভালো।

অ্যাপ্লিকেশন চালানোর নির্দেশনা

অ্যান্ড্রয়েড ডিভাইস সংযুক্ত করে Run করুন। অ্যাপ লোড হওয়ার সাথে সাথে ফ্র্যাগমেন্ট লোড হবে এবং এক্টিভিটির মেথড কল হয়ে টোস্ট দেখাবে।

  1. অ্যান্ড্রয়েড অ্যাপে onDestroy() মেথড কল করার পদ্ধতি

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

  3. অ্যান্ড্রয়েডে এক্টিভিটির থেকে ফ্র্যাগমেন্টে ভেরিয়েবল পাস করার পদ্ধতি

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