বাংলায় অ্যান্ড্রয়েড সহায়িকা - Bangla Android Guide

অন্য একটিভিটিতে ফ্রাগমেন্ট পূণর্ব্যবহার করা

মাল্টিপল স্ক্রিনের জন্য ডিজাইনে একটি আবর্তিত (রিকারিং) প্যাটার্ন হচ্ছে আপনার ইন্টারফেসের একটি অংশ থাকা যা কিছু স্ক্রিন কনফিগারেশনে একটি পেন হিসাবে এবং অন্য কনফিগারেশনে একটি পৃথক একটিভিটি হিসাবে বাস্তবায়িত হয়। উদাহরণস্বরূপ বলা যায়, নিউজ রিডার নমুনায়, নিউজ আর্টিকেল টেক্সট লার্জ (বড়) স্ক্রিনে ডান পাশের পেনে, কিন্তু ছোট স্ক্রিনে একটি পৃথক একটিভিটি পরিবেশিত হয়।

এই ধরনের কেসে, আপনি সাধারণভাবে বেশ কিছু একটিভিটিতে একই ফ্রাগমেন্ট সাবক্লাস পূণর্ব্যবহারের মাধ্যমে কোডের পূণরাবৃত্তি রোধ করতে পারেন। উদাহরণস্বরূপ, ArticleFragment ডুয়েল-পেন লেআউটে ব্যবহৃত হয়:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal">
    <fragment android:id="@+id/headlines"
              android:layout_height="fill_parent"
              android:name="com.example.android.newsreader.HeadlinesFragment"
              android:layout_width="400dp"
              android:layout_marginRight="10dp"/>
    <fragment android:id="@+id/article"
              android:layout_height="fill_parent"
              android:name="com.example.android.newsreader.ArticleFragment"
              android:layout_width="fill_parent" />
</LinearLayout>

এবং ছোট সিস্ক্রনের (ArticleActivity) জন্য একটিভিটি লেআউটে পূণর্ব্যবহার (একটি লেআউট ছাড়াই):

ArticleFragment frag = new ArticleFragment();
getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();

স্বাভাবিকভাবে, একটি XML লেআউটে ফ্রাগমেন্টের ডিক্লেয়ার করার মতোই এর একই ফলাফল আছে, কিন্তু এই ক্ষেত্রে একটি XML লেআউট অপ্রয়োজনীয় কাজ কারন আর্টিকেল ফ্রাগমেন্ট এই একটিভিটির একমাত্র উপাদান।

আপনার ফ্রাগমেন্ট ডিজাইন করার সময় একটি গুরুত্বপূর্ণ মনে রাখা উচিত তা হচ্ছে একটি নির্দিষ্ট একটিভিটিতে একটি শক্তিশালি কাপলিং (সংযোজন) তৈরী না করা। আপনি সাধারণভাবে এটা করতে পারবেন একটি ইন্টারফেস নির্ধারণ করার মাধ্যমে যা সকল উপায়কে পৃথক করে যে উপায়ে ফ্রাগমেন্টকে এর হোস্ট একটিভিটির সাথে যোগযোগ করতে হয় এবং এরপর হোস্ট একটিবিটি ঐ ইন্টারফেস বাস্তবায়ন করে:

উদাহরণস্বরূপ: নিউজ রিডার অ্যাপের HeadlinesFragment সঠিকভাবে ঐটা করে থাকে:

public class HeadlinesFragment extends ListFragment {
    ...
    OnHeadlineSelectedListener mHeadlineSelectedListener = null;

    /* Must be implemented by host activity */
    public interface OnHeadlineSelectedListener {
        public void onHeadlineSelected(int index);
    }
    ...

    public void setOnHeadlineSelectedListener(OnHeadlineSelectedListener listener) {
        mHeadlineSelectedListener = listener;
    }
}

তারপর, যখন ইউজার একটি শিরোনাম ঠিক করে, ফ্রাগমেন্ট হোস্ট একটিভিটি কর্তৃক নির্দিষ্ট লিসেনারকে অবহিত করে (একটি নির্দিষ্ট হার্ড (শক্তিশালী) কোডেড একটিভিটি জ্ঞাপন করার বিপরীত):

public class HeadlinesFragment extends ListFragment {
    ...
    @Override
    public void onItemClick(AdapterView<?> parent,
                            View view, int position, long id) {
        if (null != mHeadlineSelectedListener) {
            mHeadlineSelectedListener.onHeadlineSelected(position);
        }
    }
    ...
}

এই কৌশল Supporting Tablets and Handsets (http://developer.android.com/guide/practices/tablets-and-handsets.html) গাইডে আরও আলোচনা করা হয়েছে।