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

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

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

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

Android 13 এবং উচ্চতর Android ডিভাইসগুলির জন্য একটি পূর্বাভাসমূলক ব্যাক জেসচার অন্তর্ভুক্ত। এই বৈশিষ্ট্য সম্পর্কে আরও জানতে, ভবিষ্যদ্বাণীমূলক ব্যাক জেসচারের জন্য সমর্থন যোগ করুন দেখুন।

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

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

OnBackPressedDispatcher নিয়ন্ত্রণ করে কিভাবে ব্যাক বোতাম ইভেন্টগুলি এক বা একাধিক OnBackPressedCallback অবজেক্টে পাঠানো হয়। OnBackPressedCallback এর কনস্ট্রাক্টর প্রাথমিক সক্রিয় অবস্থার জন্য একটি বুলিয়ান নেয়। যখন একটি কলব্যাক সক্ষম করা হয়-অর্থাৎ, isEnabled() true ফেরত দেয় — প্রেরণকারী কলব্যাকের handleOnBackPressed() কে ব্যাক বোতাম ইভেন্টটি পরিচালনা করতে কল করে। আপনি setEnabled() কল করে সক্রিয় অবস্থা পরিবর্তন করতে পারেন।

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

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

কোটলিন

class MyFragment : Fragment() {

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

        // This callback is only 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 is only 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 সক্রিয় না থাকে, এবং কলব্যাক two সক্রিয় না থাকলে শুধুমাত্র কলব্যাক one আহ্বান করা হয়।

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

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

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

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

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

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