যেভাবে < Fragment> এলিমেন্ট সহ পূর্ববর্তী অনুশীলনীতে (previous lesson) দেখানো হয়েছে, লেআউটের মধ্যে একটা একটিভিটির জন্য ফ্রাগমেন্ট নির্ধারন করার বদলে আপনি একটিভিটি রানটাইমে একটিভিটিতে একটি ফ্রাগমেন্ট সংযোজন করে দিতে পারেন। এটা প্রয়োজনীয় যদি আপনি একটিভিটি অস্তিত্বশীল থাকাকালীন সময়ে ফ্রাগমেন্ট পরিবর্তন করার পরিকল্পনা করে থকেন।
একটি ফ্রাগমেন্ট সংযোজন বা বিয়োজন করার মতো বিনিময় কর্য সম্পাদন করতে, একটি FragmentTransaction তৈরী করতে আপনাকে অবশ্যই FragmentManager ব্যবহার করতে হবে, যা সংযোজন, বিয়োজন, প্রতিস্থাপন এবং অন্যান্য ফ্রাগমেন্ট বিনিময় করতে এপিআই সরবারহ করে থাকে।
ঐদি আপনার একটিভিটি ফ্রাগমেন্টকে বিয়োজিত বা প্রতিস্থাপিত হতে অনুমোদন করে, আপনার উচিত একটিভিটির onCreate()মেথডের সময় একটিভিটিতে প্রাথমিক ফ্রাগমেন্ট সংযোজন করা।
ফ্রাগমেন্ট নিয়ে কাজ করার সময় একটি গুরুত্বপূর্ণ নিয়ম-বিশেষত ঐ সকল সকল যা রান টাইমে সংযোজন করা হয়েছে-ঐ নিয়মটি হচ্ছে যে ফ্রাগমেন্টের অবশ্যই লেআউটের মধ্যে একটা কনটেইনার View থাকতে হবে যার মধ্যে ফ্রাগমেন্টের লেআউট অবস্থান করে।
নিম্নোক্ত লেআউট পূববর্তী অনুশীলনীতে দেখানো লেআউটের বিকল্প যা একবারে শুধু একটা ফ্রাগমেন্ট প্রদর্শন করে। একটা ফ্রাগমেন্টকে আর একটা ফ্রাগমেন্টে প্রতিস্থাপন করতে একটিভিটির লেআউট একটা খালি FrameLayout অন্তর্ভূক্ত করে যা ফ্রাগমেন্ট কনটেইনার হিসাবে কাজ করে।
দেখা যায় যে, পূর্ববর্তী অনুশীলনীর লেআউট ফাইলের মতো ফাইলনেমটি একই রকম, কিন্তু লেআউট ডিরেক্টরীতে ষধৎমব কোয়ালিফায়ার নেই, তাই ডিভাইস স্ক্রিন বড় হওয়ার চেয়ে যখন ছোট হয় তখন এই লেআউটটি ব্যবহৃত হয় কারন স্ক্রিন একই সাথে উভয় ফ্রাগমেন্টের সাথে ফিট করে না।
res/layout/news_articles.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
আপনার একটিভিটির মধ্যে সাপোর্ট লাইব্রেরী এপিআই ব্যবহার করে একটি FragmentManager পেতে getSupportFragmentManager()কল করুন। তারপর FragmentTransaction তৈরী করতে beginTransaction()কল করুন এবং একটি ফ্রাগমেন্ট সংযোজন করতে add()কল করুন।
আপনি একই FragmentTransaction ব্যবহার করে একটিভিটির জন্য মাল্টিপল ফ্রাগমেন্ট ট্রানজেকশন সম্পাদন করতে পারেন। যখন আপনি এই পরিবর্তন করতে প্রস্তুত হবেন, আপনাকে অবশ্যই commit()কল করতে হবে ।
উদাহরনস্বরূপ, পূর্ববর্তী লেআউটে কীভাবে একটি ফ্রাগমেন্ট সংযোজন করা যায় তা দেয়া হলো:
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_articles);
// Check that the activity is using the layout version with
// the fragment_container FrameLayout
if (findViewById(R.id.fragment_container) != null) {
// However, if we're being restored from a previous state,
// then we don't need to do anything and should return or else
// we could end up with overlapping fragments.
if (savedInstanceState != null) {
return;
}
// Create a new Fragment to be placed in the activity layout
HeadlinesFragment firstFragment = new HeadlinesFragment();
// In case this activity was started with special instructions from an
// Intent, pass the Intent's extras to the fragment as arguments
firstFragment.setArguments(getIntent().getExtras());
// Add the fragment to the 'fragment_container' FrameLayout
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment).commit();
}
}
}
কারন ফ্রাগমেন্ট রানটাইমে FrameLayout কনটেইনারে সংযুক্ত হয়েছে- একটি < fragment> এলিমেন্ট দিয়ে একটিভিটির লেআউটে এটা নির্ধারণ করার পরিবর্তে- একটিভিটিটি ফ্রাগমেন্টটিকে বিয়োজিত করতে পারে এবং ভিন্ন একটার সাথে এটাকে প্রতিস্থাপন করতে পারে।