ব্যাক নেভিগেশন হল ব্যবহারকারী আগে যেসব স্ক্রিন দেখেছেন সেগুলির ইতিহাসে ফিরে যাওয়ার পদ্ধতি। এই ধরনের নেভিগেশনের জন্য সব Android ডিভাইসে 'ফিরে যান' বোতাম থাকে, তাই আপনার অ্যাপের UI-তে 'ফিরে যান' বোতাম যোগ করবেন না। ব্যবহারকারীর Android ডিভাইসের উপর নির্ভর করে, এই বোতামটি একটি ফিজিক্যাল বোতাম বা একটি সফ্টওয়্যার বোতাম হতে পারে।
ব্যবহারকারী আপনার অ্যাপ্লিকেশন জুড়ে নেভিগেট করার সময় 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-কে ফ্র্যাগমেন্ট বা অন্যান্য লাইফসাইকেল মালিকদের ব্যবহারের জন্য উপযুক্ত করে তোলে
যাদের লাইফটাইম অ্যাক্টিভিটির চেয়ে কম।
এখানে কলব্যাক প্রয়োগের একটি উদাহরণ দেওয়া হল:
Kotlin
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() ব্যবহার করে একাধিক কলব্যাক প্রদান করতে পারবেন।
আপনি যখন এটি করেন, তখন আপনি যে ক্রমে কলব্যাক যোগ করেন তার বিপরীত ক্রমে কলব্যাকগুলি চালু করা হয়—শেষ যোগ করা কলব্যাকটি প্রথমে Back বোতাম ইভেন্টটি পরিচালনা করার সুযোগ পায়। যেমন, আপনি যদি এই ক্রমে
one, two এবং three নামের তিনটি কলব্যাক যোগ করেন, তাহলে সেগুলি এই ক্রমে ইনভোক করা হয়
three, two, one।
কলব্যাক
চেন অফ রেসপনসিবিলিটি
প্যাটার্ন অনুসরণ করে। চেনের প্রতিটি কলব্যাক তখনই ইনভোক করা হয় যখন আগের
কলব্যাক চালু করা হয়নি। এর অর্থ হল, পূর্ববর্তী উদাহরণে, কলব্যাক two তখনই কল করা হয় যদি কলব্যাক three
চালু না থাকে এবং কলব্যাক one তখনই কল করা হয় যদি কলব্যাক two
চালু না থাকে।
মনে রাখবেন যে addCallback() ব্যবহার করে কলব্যাক যোগ করা হলে,
LifecycleOwner, Lifecycle.State.STARTED স্ট্যাটাসে প্রবেশ না করা পর্যন্ত
এটি দায়িত্বের চেনে যোগ করা হয় না।
সাময়িক পরিবর্তনের জন্য OnBackPressedCallback-এ
চালু থাকা স্ট্যাটাস পরিবর্তন করার সাজেশন আমরা দিই, কারণ এটি করলে উপরে উল্লেখ করা ক্রম বজায় থাকে।
একাধিক নেস্টেড লাইফসাইকেল মালিকের উপর কলব্যাক রেজিস্টার করা থাকলে, এটি বিশেষভাবে গুরুত্বপূর্ণ।
আপনি যদি OnBackPressedCallback সম্পূর্ণভাবে সরিয়ে দিতে চান,
তাহলে
remove() নম্বরে কল করতে পারেন।
সাধারণত এটি করার প্রয়োজন হয় না, কারণ সংশ্লিষ্ট LifecycleOwner
নষ্ট হয়ে গেলে কলব্যাক অটোমেটিক সরিয়ে দেওয়া হয়।
Activity onBackPressed()
আপনি যদি
onBackPressed()
ব্যবহার করে 'ফিরে যান' বোতামের ইভেন্ট ম্যানেজ করেন, তাহলে আমরা এর পরিবর্তে
OnBackPressedCallback ব্যবহার করার সাজেশন দিই।
তবে, আপনি এই পরিবর্তন করতে না পারলে, নিম্নলিখিত নিয়ম প্রযোজ্য হবে:
- আপনি
super.onBackPressed()কল করলে,addCallback-এর মাধ্যমে রেজিস্টার করা সব কলব্যাক মূল্যায়ন করা হয়। - Android 12 (API লেভেল 32) এবং তার আগের ভার্সনে,
OnBackPressedCallback-এর কোনও রেজিস্টার করা ইনস্ট্যান্স নির্বিশেষে,onBackPressedসবসময় কল করা হয়।