কাস্টম ব্যাক নেভিগেশন প্রদান

ব্যবহারকারীরা ব্যাক নেভিগেশন ব্যবহার করে স্ক্রিনের মাধ্যমে পিছনের দিকে নেভিগেট করেন। বেশিরভাগ অ্যান্ড্রয়েড ডিভাইসে একটি ব্যাক বোতাম থাকে—ফিজিক্যাল, সফ্টওয়্যার, অথবা জেসচার-ভিত্তিক। সাধারণত, আপনার অ্যাপে ব্যাক বোতাম যোগ করা উচিত নয়। তবে, সামঞ্জস্যতা মোডে থাকা অ্যান্ড্রয়েড অটোমোটিভ ওএস (AAOS) ডিভাইসগুলি একটি সিস্টেম ব্যাক বোতাম ব্যবহার করে। এটি নেভিগেশন পরিচালনা করে, তাই আপনার নিজস্ব যোগ করার প্রয়োজন নেই। বিস্তারিত জানার জন্য, AAOS সামঞ্জস্যতা মোড দেখুন।

ব্যবহারকারী যখন আপনার অ্যাপ্লিকেশন জুড়ে নেভিগেট করে তখন Android গন্তব্যস্থলের একটি ব্যাক স্ট্যাক বজায় রাখে। এটি সাধারণত Back বোতাম টিপলে Android কে পূর্ববর্তী গন্তব্যস্থলগুলিতে সঠিকভাবে নেভিগেট করতে দেয়। তবে, এমন কিছু ক্ষেত্রে আছে যেখানে সর্বোত্তম সম্ভাব্য ব্যবহারকারীর অভিজ্ঞতা প্রদানের জন্য আপনার অ্যাপকে নিজস্ব Back আচরণ প্রয়োগ করতে হতে পারে। উদাহরণস্বরূপ, WebView ব্যবহার করার সময়, আপনি ডিফল্ট Back বোতাম আচরণকে ওভাররাইড করতে চাইতে পারেন যাতে ব্যবহারকারী আপনার অ্যাপের পূর্ববর্তী স্ক্রিনের পরিবর্তে তাদের ওয়েব ব্রাউজিং ইতিহাসের মাধ্যমে ফিরে যেতে পারে।

কম্পোজে কাস্টম ব্যাক নেভিগেশন বাস্তবায়ন করুন

জেটপ্যাক কম্পোজে, আপনি BackHandler কম্পোজেবল ব্যবহার করে কাস্টম ব্যাক নেভিগেশন পরিচালনা করতে পারেন।

নেভিগেশন কম্পোজ ব্যবহার করার সময়, আপনি সাধারণত ব্যাক স্ট্যাকের পূর্ববর্তী স্ক্রিনে নেভিগেট করতে NavController.navigateUp() অথবা NavController.popBackStack() ব্যবহার করেন। তবে, ব্যবহারকারী যখন সিস্টেম ব্যাক বোতাম টিপে অথবা ব্যাক অঙ্গভঙ্গি ব্যবহার করে তখন আপনি কাস্টম আচরণ বাস্তবায়ন করতে চান এমন ক্ষেত্রে BackHandler কার্যকর। উদাহরণস্বরূপ, যদি আপনি আপনার অ্যাপে একটি WebView প্রদর্শন করেন, তাহলে আপনি ব্যবহারকারীদের সিস্টেম ব্যাক বোতাম টিপে ব্রাউজিং ইতিহাসের মাধ্যমে ফিরে নেভিগেট করার অনুমতি দিতে পারেন।

যদি আপনার কম্পোজেবল ট্রির বিভিন্ন স্তরে একাধিক সক্রিয় BackHandler কম্পোজেবল থাকে, তাহলে শুধুমাত্র সবচেয়ে ভেতরেরটি ব্যাক ইভেন্টটিকে বাধা দেবে।

ভিউ সহ কাস্টম ব্যাক নেভিগেশন বাস্তবায়ন করুন

FragmentActivity এবং AppCompatActivity এর বেস ক্লাস ComponentActivity আপনাকে OnBackPressedDispatcher ব্যবহার করে Back বোতামের আচরণ নিয়ন্ত্রণ করতে দেয়, যা আপনি getOnBackPressedDispatcher() এ কল করে পুনরুদ্ধার করতে পারেন।

OnBackPressedDispatcher নিয়ন্ত্রণ করে কিভাবে Back বোতাম ইভেন্টগুলি এক বা একাধিক OnBackPressedCallback অবজেক্টে প্রেরণ করা হয়। OnBackPressedCallback এর কনস্ট্রাক্টর প্রাথমিক সক্রিয় অবস্থার জন্য একটি বুলিয়ান নেয়। শুধুমাত্র যখন একটি কলব্যাক সক্রিয় থাকে, উদাহরণস্বরূপ যখন isEnabled() true ফেরত দেয়, তখন ডিসপ্যাচার কলব্যাকের handleOnBackPressed() কে Back বোতাম ইভেন্ট পরিচালনা করার জন্য কল করবে। আপনি setEnabled() কল করে সক্রিয় অবস্থা পরিবর্তন করতে পারেন।

কলব্যাকগুলি addCallback পদ্ধতি ব্যবহার করে যোগ করা হয়। addCallback() পদ্ধতি ব্যবহার করুন যা একটি LifecycleOwner নেয়। এইভাবে OnBackPressedCallback শুধুমাত্র তখনই যোগ করা হয় যখন LifecycleOwner Lifecycle.State.STARTED হয়। এই কার্যকলাপটি নিবন্ধিত কলব্যাকগুলিও সরিয়ে দেয় যখন তাদের সম্পর্কিত LifecycleOwner ধ্বংস হয়ে যায়, যা মেমোরি লিক প্রতিরোধ করে এবং এটিকে টুকরো বা অন্যান্য জীবনচক্র মালিকদের ব্যবহারের জন্য উপযুক্ত করে তোলে যাদের কার্যকলাপটির চেয়ে কম জীবনকাল রয়েছে।

কলব্যাক বাস্তবায়নের একটি উদাহরণ এখানে দেওয়া হল:

কোটলিন

class MyFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // This callback will only be called when MyFragment is at least Started.
        val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
            // Handle the back button event
        }

        // The callback can be enabled or disabled here or in the lambda
    }
    ...
}

জাভা

public class MyFragment extends Fragment {

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // This callback will only be called when MyFragment is at least Started.
        OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
            @Override
            public void handleOnBackPressed() {
                // Handle the back button event
            }
        };
        requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);

        // The callback can be enabled or disabled here or in handleOnBackPressed()
    }
    ...
}

আপনি addCallback() ব্যবহার করে একাধিক কলব্যাক প্রদান করতে পারেন। এটি করার সময়, কলব্যাকগুলি যে ক্রমে যুক্ত করা হয় তার বিপরীত ক্রমে আহ্বান করা হয় - শেষের দিকে যোগ করা কলব্যাকটি প্রথমে ব্যাক বোতাম ইভেন্ট পরিচালনা করার সুযোগ পায়। উদাহরণস্বরূপ, যদি আপনি one , two এবং three নামে তিনটি কলব্যাক ক্রমানুসারে যোগ করেন, তাহলে সেগুলি যথাক্রমে three , two এবং one ক্রমে আহ্বান করা হবে।

কলব্যাকগুলি চেইন অফ রেসপন্সিবিলিটি প্যাটার্ন অনুসরণ করে। চেইনের প্রতিটি কলব্যাক কেবল তখনই চালু করা হয় যদি পূর্ববর্তী কলব্যাকটি সক্রিয় না থাকে। এর অর্থ হল, পূর্ববর্তী উদাহরণে, কলব্যাক two কেবল তখনই চালু করা হবে যদি কলব্যাক three সক্রিয় না থাকে। কলব্যাক one কেবল তখনই চালু করা হবে যদি কলব্যাক two সক্রিয় না থাকে, ইত্যাদি।

মনে রাখবেন যে addCallback() ব্যবহার করে যোগ করা হলে, LifecycleOwner Lifecycle.State.STARTED অবস্থায় প্রবেশ না করা পর্যন্ত কলব্যাক দায়িত্বের শৃঙ্খলে যোগ করা হয় না।

অস্থায়ী পরিবর্তনের জন্য OnBackPressedCallback এ সক্রিয় অবস্থা পরিবর্তন করার পরামর্শ দেওয়া হয় কারণ এটি উপরে বর্ণিত ক্রম বজায় রাখে, যা বিশেষ করে গুরুত্বপূর্ণ যদি আপনার একাধিক ভিন্ন নেস্টেড লাইফসাইকেল মালিকদের কলব্যাক নিবন্ধিত থাকে।

তবে, যেসব ক্ষেত্রে আপনি OnBackPressedCallback সম্পূর্ণরূপে অপসারণ করতে চান, সেক্ষেত্রে আপনার remove() কল করা উচিত। তবে এটি সাধারণত প্রয়োজন হয় না, কারণ কলব্যাকগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলা হয় যখন তাদের সম্পর্কিত LifecycleOwner ধ্বংস হয়ে যায়।