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

ব্যাক নেভিগেশন হল ব্যবহারকারীরা পূর্বে দেখা স্ক্রিনের ইতিহাসের মধ্য দিয়ে কীভাবে পিছনে চলে যায়। সমস্ত অ্যান্ড্রয়েড ডিভাইস এই ধরনের নেভিগেশনের জন্য একটি পিছনের বোতাম প্রদান করে, তাই আপনার অ্যাপের UI-তে একটি ব্যাক বোতাম যোগ করা উচিত নয়। ব্যবহারকারীর অ্যান্ড্রয়েড ডিভাইসের উপর নির্ভর করে, এই বোতামটি একটি শারীরিক বোতাম বা একটি সফ্টওয়্যার বোতাম হতে পারে৷

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

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

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

OnBackPressedDispatcher নিয়ন্ত্রণ করে কিভাবে ব্যাক বোতাম ইভেন্টগুলি এক বা একাধিক OnBackPressedCallback অবজেক্টে পাঠানো হয়। OnBackPressedCallback এর কনস্ট্রাক্টর প্রাথমিক সক্রিয় অবস্থার জন্য একটি বুলিয়ান নেয়। শুধুমাত্র যখন একটি কলব্যাক সক্ষম করা হয় (অর্থাৎ, isEnabled() true ফেরত দেয়) প্রেরণকারী কলব্যাকের handleOnBackPressed() ব্যাক বোতাম ইভেন্টটি পরিচালনা করতে কল করবে। আপনি 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 ধ্বংস হয়ে যায়৷

ব্যাকপ্রেসড() এর উপর কার্যকলাপ

আপনি যদি ব্যাক বোতাম ইভেন্টগুলি পরিচালনা করার জন্য onBackPressed() ব্যবহার করেন, আমরা পরিবর্তে একটি OnBackPressedCallback ব্যবহার করার পরামর্শ দিই। যাইহোক, আপনি যদি এই পরিবর্তন করতে অক্ষম হন তবে নিম্নলিখিত নিয়মগুলি প্রযোজ্য হবে:

  • আপনি super.onBackPressed() কল করলে addCallback এর মাধ্যমে নিবন্ধিত সমস্ত কলব্যাক মূল্যায়ন করা হয়।
  • Android 12 (API লেভেল 32) এবং তার নিচের ক্ষেত্রে, OnBackPressedCallback কোনো নিবন্ধিত দৃষ্টান্ত নির্বিশেষে সর্বদা onBackPressed বলা হয়।