এই উদাহরণটি দেখায় কিভাবে কোটলিন ব্যবহার করে একটি ফ্র্যাগমেন্ট থেকে এর পেরেন্ট এক্টিভিটির মেথড কল করা যায়। এটি ফ্র্যাগমেন্ট-এক্টিভিটি কমিউনিকেশনের একটি সাধারণ প্যাটার্ন।
প্রথম ধাপ: নতুন প্রজেক্ট তৈরি করুন
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 করুন। অ্যাপ লোড হওয়ার সাথে সাথে ফ্র্যাগমেন্ট লোড হবে এবং এক্টিভিটির মেথড কল হয়ে টোস্ট দেখাবে।