
প্রেডিক্টিভ ব্যাক, একটি অঙ্গভঙ্গি নেভিগেশন বৈশিষ্ট্য, ব্যবহারকারীদের ব্যাক সোয়াইপ তাদের কোথায় নিয়ে যায় তা প্রিভিউ করতে দেয়।
উদাহরণস্বরূপ, ব্যাক জেসচার ব্যবহার করলে আপনার অ্যাপের পিছনে হোম স্ক্রিনের একটি অ্যানিমেটেড প্রিভিউ প্রদর্শিত হতে পারে, যেমনটি চিত্র ১-এর মকআপে দেখানো হয়েছে।
অ্যান্ড্রয়েড ১৫ থেকে শুরু করে, ভবিষ্যদ্বাণীমূলক ব্যাক অ্যানিমেশনের জন্য ডেভেলপার বিকল্পটি আর উপলব্ধ নেই। ব্যাক-টু-হোম, ক্রস-টাস্ক এবং ক্রস-অ্যাক্টিভিটির মতো সিস্টেম অ্যানিমেশনগুলি এখন এমন অ্যাপগুলিতে প্রদর্শিত হয় যারা সম্পূর্ণরূপে বা কার্যকলাপ স্তরে ভবিষ্যদ্বাণীমূলক ব্যাক জেসচারটি বেছে নিয়েছে।
আপনি এই ব্যাক-টু-হোম অ্যানিমেশনটি পরীক্ষা করতে পারেন (এই পৃষ্ঠার পরবর্তী অংশে বর্ণিত হিসাবে)।
ভবিষ্যদ্বাণীমূলক ব্যাক জেসচার সমর্থন করার জন্য আপনার অ্যাপটি আপডেট করতে হবে, ব্যাকওয়ার্ড সামঞ্জস্যপূর্ণ OnBackPressedCallback AppCompat 1.6.0-alpha05 (AndroidX) বা উচ্চতর API ব্যবহার করতে হবে, অথবা নতুন OnBackInvokedCallback প্ল্যাটফর্ম API ব্যবহার করতে হবে। বেশিরভাগ অ্যাপ ব্যাকওয়ার্ড সামঞ্জস্যপূর্ণ AndroidX API ব্যবহার করে।
এই আপডেটটি ব্যাক নেভিগেশন সঠিকভাবে আটকানোর জন্য একটি মাইগ্রেশন পাথ প্রদান করে, যার মধ্যে রয়েছে KeyEvent.KEYCODE_BACK থেকে ব্যাক ইন্টারসেপশন এবং Activity এবং Dialog মতো onBackPressed পদ্ধতি সহ যেকোনো ক্লাস নতুন সিস্টেম ব্যাক API দিয়ে প্রতিস্থাপন করা।
কোডল্যাব এবং গুগল আই/ও ভিডিও
এই পৃষ্ঠায় এই ডকুমেন্টেশনটি ব্যবহার করার পাশাপাশি, আমাদের codelab ব্যবহার করে দেখুন । এটি AndroidX Activity API ব্যবহার করে ভবিষ্যদ্বাণীমূলক ব্যাক জেসচার পরিচালনা করে এমন একটি WebView-এর একটি সাধারণ ব্যবহার-কেস বাস্তবায়ন প্রদান করে।
আপনি আমাদের Google I/O ভিডিওটিও দেখতে পারেন, যেখানে AndroidX এবং প্ল্যাটফর্ম API বাস্তবায়নের অতিরিক্ত উদাহরণ রয়েছে।
কম্পোজে কাস্টম ব্যাক জেসচার পরিচালনা করুন
কম্পোজ কাস্টম ব্যাক জেসচার পরিচালনা করার জন্য PredictiveBackHandler কম্পোজেবল প্রদান করে। এই API আপনাকে ব্যাক জেসচারে সাড়া দেওয়ার অনুমতি দেয় এবং BackEventCompat অবজেক্টের একটি Flow প্রদান করে যা আপনি ব্যবহারকারীর সোয়াইপ করার সময় কাস্টম অ্যানিমেশন বা ট্রানজিশন বাস্তবায়ন করতে ব্যবহার করতে পারেন।
PredictiveBackHandler(enabled = isBackHandlerEnabled) { progress: Flow<BackEventCompat> ->
try {
progress.collect { backEvent ->
// Update your UI or animation based on backEvent.progress
}
// Handle the final back action (e.g., navigate back)
} catch (e: CancellationException) {
// Back gesture was cancelled, reset your UI
}
}
যদি আপনার অগ্রগতি ট্র্যাক না করে কেবল ব্যাক জেসচারটি আটকাতে হয়, তাহলে BackHandler ব্যবহার করুন।
ডিফল্ট ব্যাক নেভিগেশন ব্যবহার করে এমন একটি অ্যাপ আপডেট করুন
প্রেডিক্টিভ ব্যাক ডিফল্টরূপে সক্রিয় থাকে।
যদি আপনার অ্যাপটি Fragments অথবা Navigation Component ব্যবহার করে, তাহলে AndroidX Activity 1.6.0-alpha05 বা তার উচ্চতর সংস্করণে আপগ্রেড করুন।
কাস্টম ব্যাক নেভিগেশন ব্যবহার করে এমন একটি অ্যাপ আপডেট করুন
যদি আপনার অ্যাপটি কাস্টম ব্যাক আচরণ প্রয়োগ করে, তাহলে এটি AndroidX ব্যবহার করে কিনা এবং এটি কীভাবে ব্যাক নেভিগেশন পরিচালনা করে তার উপর নির্ভর করে বিভিন্ন মাইগ্রেশন পাথ রয়েছে।
| আপনার অ্যাপ কীভাবে ব্যাক নেভিগেশন পরিচালনা করে | প্রস্তাবিত মাইগ্রেশন পথ (এই পৃষ্ঠায় লিঙ্ক) |
| অ্যান্ড্রয়েডএক্স এপিআই | একটি বিদ্যমান AndroidX ব্যাক বাস্তবায়ন মাইগ্রেট করুন |
| অসমর্থিত প্ল্যাটফর্ম API গুলি | অসমর্থিত ব্যাক নেভিগেশন API ধারণকারী একটি AndroidX অ্যাপকে AndroidX API-তে স্থানান্তর করুন |
একটি AndroidX ব্যাক নেভিগেশন বাস্তবায়ন মাইগ্রেট করুন
এই ব্যবহারের ক্ষেত্রে এটি সবচেয়ে সাধারণ (এবং সবচেয়ে প্রস্তাবিত)। এটি নতুন বা বিদ্যমান অ্যাপগুলির ক্ষেত্রে প্রযোজ্য যারা OnBackPressedDispatcher এর সাথে কাস্টম জেসচার নেভিগেশন হ্যান্ডলিং বাস্তবায়ন করে, যেমনটি Provide custom back navigation এ বর্ণিত হয়েছে।
যেসব API ইতিমধ্যেই OnBackPressedDispatcher ব্যবহার করছে (যেমন Fragments এবং Navigation Component) সেগুলো যাতে ভবিষ্যদ্বাণীমূলক ব্যাক জেসচারের সাথে নির্বিঘ্নে কাজ করে তা নিশ্চিত করতে, AndroidX Activity 1.6.0-alpha05 এ আপগ্রেড করুন।
```xml
// In your build.gradle file:
dependencies {
// Add this in addition to your other dependencies
implementation "androidx.activity:activity:1.6.0-alpha05"
```
অসমর্থিত ব্যাক নেভিগেশন API ধারণকারী একটি AndroidX অ্যাপকে AndroidX API-তে স্থানান্তর করুন
যদি আপনার অ্যাপটি AndroidX লাইব্রেরি ব্যবহার করে কিন্তু অসমর্থিত ব্যাক নেভিগেশন API গুলি প্রয়োগ করে বা রেফারেন্স করে, তাহলে নতুন আচরণ সমর্থন করার জন্য আপনাকে AndroidX API ব্যবহারে মাইগ্রেট করতে হবে।
অসমর্থিত API গুলিকে AndroidX API তে স্থানান্তর করতে:
OnBackPressedCallbackবাস্তবায়নের মাধ্যমে আপনার সিস্টেমের ব্যাক হ্যান্ডলিং লজিককে AndroidX এরOnBackPressedDispatcherএ স্থানান্তর করুন। বিস্তারিত নির্দেশিকা জানতে, কাস্টম ব্যাক নেভিগেশন প্রদান করুন দেখুন।ব্যাক জেসচার আটকানো বন্ধ করার জন্য প্রস্তুত হলে
OnBackPressedCallbackঅক্ষম করুন।OnBackPressedঅথবাKeyEvent.KEYCODE_BACKএর মাধ্যমে ব্যাক ইভেন্টগুলিকে আটকানো বন্ধ করুন।AndroidX Activity 1.6.0-alpha05 এ আপগ্রেড করতে ভুলবেন না।
// In your build.gradle file: dependencies { // Add this in addition to your other dependencies implementation "androidx.activity:activity:1.6.0-alpha05"
ভবিষ্যদ্বাণীমূলক ব্যাক থেকে বেরিয়ে আসুন
অপ্ট আউট করতে, AndroidManifest.xml তে, <application> ট্যাগে, android:enableOnBackInvokedCallback ফ্ল্যাগটিকে false তে সেট করুন।
<application
...
android:enableOnBackInvokedCallback="false"
... >
...
</application>
এটিকে মিথ্যাতে সেট করলে নিম্নলিখিত কাজগুলি সম্পন্ন হয়:
- ভবিষ্যদ্বাণীমূলক ব্যাক জেসচার সিস্টেম অ্যানিমেশন অক্ষম করে।
-
OnBackInvokedCallbackউপেক্ষা করে, কিন্তুOnBackPressedCallbackকলগুলি কাজ করতে থাকে।
অ্যাক্টিভিটি লেভেলে অপ্ট আউট করুন
android:enableOnBackInvokedCallback ফ্ল্যাগ আপনাকে অ্যাক্টিভিটি লেভেলে ভবিষ্যদ্বাণীমূলক সিস্টেম অ্যানিমেশনগুলি অপ্ট আউট করতে দেয়। এই আচরণটি বৃহৎ মাল্টি-অ্যাক্টিভিটি অ্যাপগুলিকে ভবিষ্যদ্বাণীমূলক ব্যাক জেসচারে স্থানান্তরিত করা আরও পরিচালনাযোগ্য করে তোলে।
নিম্নলিখিত কোডটি MainActivity থেকে ব্যাক-টু-হোম সিস্টেম অ্যানিমেশন সক্ষম করার জন্য enableOnBackInvokedCallback সেটের একটি উদাহরণ দেখায়:
<manifest ...>
<application . . .
android:enableOnBackInvokedCallback="false">
<activity
android:name=".MainActivity"
android:enableOnBackInvokedCallback="true"
...
</activity>
<activity
android:name=".SecondActivity"
android:enableOnBackInvokedCallback="false"
...
</activity>
</application>
</manifest>
android:enableOnBackInvokedCallback ফ্ল্যাগ ব্যবহার করার সময় নিম্নলিখিত বিবেচ্য বিষয়গুলি মনে রাখবেন:
-
android:enableOnBackInvokedCallback=falseসেট করলে অ্যাক্টিভিটি লেভেলে অথবা অ্যাপ লেভেলে ভবিষ্যদ্বাণীমূলক ব্যাক অ্যানিমেশন বন্ধ হয়ে যায়, যা আপনি ট্যাগটি কোথায় সেট করেছেন তার উপর নির্ভর করে, এবং সিস্টেমকেOnBackInvokedCallbackপ্ল্যাটফর্ম API-তে কল উপেক্ষা করার নির্দেশ দেয়। তবে,OnBackPressedCallbackএ কল চলতে থাকে কারণOnBackPressedCallbackব্যাকওয়ার্ড সামঞ্জস্যপূর্ণ এবংonBackPressedAPI-কে কল করে, যা Android 13 এর আগে অসমর্থিত ছিল। - অ্যাপ লেভেলে
enableOnBackInvokedCallbackফ্ল্যাগ সেট করলে অ্যাপের সকল অ্যাক্টিভিটির জন্য ডিফল্ট মান প্রতিষ্ঠিত হয়। পূর্ববর্তী কোড উদাহরণে দেখানো হয়েছে, অ্যাক্টিভিটি লেভেলে ফ্ল্যাগ সেট করে আপনি প্রতিটি অ্যাক্টিভিটির ডিফল্ট মান ওভাররাইড করতে পারেন।
কলব্যাকের সেরা পদ্ধতি
সমর্থিত সিস্টেম ব্যাক কলব্যাক ব্যবহারের জন্য এখানে সেরা অনুশীলনগুলি দেওয়া হল; PredictiveBackHandler অথবা BackHandler (Compose এর জন্য), OnBackPressedCallback , অথবা OnBackInvokedCallback ।
প্রতিটি কলব্যাক সক্রিয় এবং নিষ্ক্রিয় করার জন্য UI অবস্থা নির্ধারণ করুন।
UI অবস্থা হল এমন একটি বৈশিষ্ট্য যা UI বর্ণনা করে। আমরা এই উচ্চ-স্তরের পদক্ষেপগুলি অনুসরণ করার পরামর্শ দিচ্ছি।
প্রতিটি কলব্যাক সক্রিয় এবং নিষ্ক্রিয় করে এমন UI অবস্থা নির্ধারণ করুন।
StateFlowবা Compose State এর মতো পর্যবেক্ষণযোগ্য ডেটা হোল্ডার টাইপ ব্যবহার করে সেই অবস্থাটি সংজ্ঞায়িত করুন এবং অবস্থা পরিবর্তনের সাথে সাথে কলব্যাক সক্ষম বা অক্ষম করুন।
যদি আপনার অ্যাপটি পূর্বে ব্যাক লজিককে কন্ডিশনাল স্টেটমেন্টের সাথে যুক্ত করে থাকে, তাহলে এর অর্থ হতে পারে যে আপনি ব্যাক ইভেন্টটি ইতিমধ্যেই হওয়ার পরে প্রতিক্রিয়া জানাচ্ছেন। নতুন কলব্যাকের সাথে এই প্যাটার্নটি এড়িয়ে চলুন। যদি সম্ভব হয়, তাহলে কন্ডিশনাল স্টেটমেন্টের বাইরে কলব্যাকটি সরান এবং পরিবর্তে কলব্যাকটিকে একটি পর্যবেক্ষণযোগ্য ডেটা হোল্ডার টাইপের সাথে যুক্ত করুন।
UI লজিকের জন্য সিস্টেম ব্যাক কলব্যাক ব্যবহার করুন
UI লজিক নির্দেশ করে কিভাবে UI প্রদর্শন করতে হয়। UI লজিক চালানোর জন্য সিস্টেম ব্যাক কলব্যাক ব্যবহার করুন, যেমন একটি ডায়ালগ প্রদর্শন করা বা একটি অ্যানিমেশন চালানো।
যদি আপনার অ্যাপটি PRIORITY_DEFAULT অথবা PRIORITY_OVERLAY দিয়ে OnBackPressedCallback অথবা OnBackInvokedCallback সক্ষম করে, তাহলে ভবিষ্যদ্বাণীমূলক ব্যাক অ্যানিমেশনগুলি চলবে না এবং আপনাকে ব্যাক ইভেন্টটি পরিচালনা করতে হবে। ব্যবসায়িক লজিক চালানোর জন্য বা লগ করার জন্য এই কলব্যাকগুলি তৈরি করবেন না।
ব্যবহারকারী যখন পিছনে সোয়াইপ করে তখন যদি আপনার অ্যাপটিকে ব্যবসায়িক লজিক বা লগ চালাতে হয়, তাহলে নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করুন:
- Android 16 এবং তার পরবর্তী ভার্সন চালিত ডিভাইসগুলিতে
PRIORITY_SYSTEM_NAVIGATION_OBSERVERসহOnBackInvokedCallbackব্যবহার করুন। এটি একটি অবজারভার-কলব্যাক তৈরি করে যা ব্যাক ইভেন্টটি ব্যবহার করে না। উদাহরণস্বরূপ, ব্যবহারকারী যখন রুট অ্যাক্টিভিটি থেকে পিছনে সোয়াইপ করে, অথবা অন্য কথায়, যখন ব্যবহারকারী আপনার অ্যাপটি ছেড়ে চলে যায়, তখন আপনি এই কলব্যাকটি নিবন্ধন করতে পারেন। এই ক্ষেত্রে, আপনি ব্যাক ইভেন্টটি লগ করতে পারেন অথবা অন্যান্য ব্যবসায়িক লজিক চালাতে পারেন, এবং ব্যাক-টু-হোম অ্যানিমেশনটি এখনও চলবে। - অ্যাক্টিভিটি-টু-অ্যাক্টিভিটি কেস বা ফ্র্যাগমেন্ট-টু-অ্যাক্টিভিটি কেসের জন্য, যদি
onDestroyমধ্যেisFinishingঅ্যাক্টিভিটি লাইফসাইকেলের মধ্যেtrueহয় তাহলে লগ করুন। - ফ্র্যাগমেন্ট-টু-ফ্র্যাগমেন্ট ক্ষেত্রে, যদি
onDestroyমধ্যেisRemovingসত্য হয়, তাহলে Fragment-এর ভিউ লাইফসাইকেলের মধ্যে log করুন। অথবাonBackStackChangeStartedঅথবাFragmentManager.OnBackStackChangedListenerমধ্যেonBackStackChangeCommittedপদ্ধতি ব্যবহার করে লগ করুন। - কম্পোজ ক্ষেত্রে, কম্পোজ ডেস্টিনেশনের সাথে সম্পর্কিত একটি
ViewModelএরonCleared()কলব্যাকের মধ্যে লগ ইন করুন। কম্পোজ ডেস্টিনেশন কখন ব্যাক স্ট্যাক থেকে পপ আপ হয়ে ধ্বংস হয়ে যায় তা জানার জন্য এটি সর্বোত্তম সংকেত।
একক দায়িত্ব কলব্যাক তৈরি করুন
আপনি ডিসপ্যাচারে একাধিক কলব্যাক যোগ করতে পারেন। কলব্যাকগুলি একটি স্ট্যাকে যোগ করা হয় যেখানে শেষ যোগ করা সক্রিয় কলব্যাকটি প্রতি ব্যাক অঙ্গভঙ্গিতে একটি কলব্যাকের মাধ্যমে পরবর্তী ব্যাক অঙ্গভঙ্গি পরিচালনা করে।
যদি সেই কলব্যাকের একক দায়িত্ব থাকে তবে কলব্যাকের সক্রিয় অবস্থা পরিচালনা করা সহজ। উদাহরণস্বরূপ:

চিত্র ২-এ দেখানো হয়েছে কিভাবে স্ট্যাকে একাধিক কলব্যাক থাকতে পারে, প্রতিটি কলব্যাক একটি নির্দিষ্ট কাজের জন্য দায়ী। একটি কলব্যাক কেবল তখনই কাজ করে যখন স্ট্যাকের উপরের কলব্যাকগুলি অক্ষম থাকে। এই উদাহরণে, ব্যবহারকারী যখন একটি ফর্মে ডেটা প্রবেশ করান তখন "আপনি কি নিশ্চিত..." কলব্যাক সক্রিয় থাকে এবং অন্যথায় অক্ষম থাকে। ব্যবহারকারী যখন ফর্ম থেকে বেরিয়ে আসার জন্য পিছনে সোয়াইপ করেন তখন কলব্যাক একটি নিশ্চিতকরণ ডায়ালগ খোলে।
অন্য কলব্যাকে এমন একটি ম্যাটেরিয়াল কম্পোনেন্ট অন্তর্ভুক্ত থাকতে পারে যা প্রেডিক্টিভ ব্যাক সমর্থন করে, প্রোগ্রেস এপিআই ব্যবহার করে একটি অ্যান্ড্রয়েডএক্স ট্রানজিশন, অথবা অন্য কোনও কাস্টম কলব্যাক।
কম্পোজেও একই স্ট্যাক আচরণ প্রযোজ্য: সবচেয়ে ভেতরের PredictiveBackHandler বা BackHandler প্রাধান্য পায়।
একইভাবে, উপরের কলব্যাকগুলি অক্ষম করা থাকলে এবং এই FragmentManager এর ব্যাক স্ট্যাক খালি না থাকলে একটি childFragmentManager এর কলব্যাক চালানো হয়। এই উদাহরণে, এই অভ্যন্তরীণ কলব্যাকটি অক্ষম করা হয়েছে।
একইভাবে, supportFragmentManager এর অভ্যন্তরীণ কলব্যাক তখনই চলে যখন উপরের কলব্যাকগুলি অক্ষম থাকে এবং এর স্ট্যাক খালি না থাকে। এই উদাহরণে, ব্যবহারকারী যদি ফর্মে টেক্সট প্রবেশ না করে "আপনি কি নিশ্চিত..." কলব্যাকটি অক্ষম করে তাহলে এই কলব্যাকটি চলে।
অবশেষে, উপরের কলব্যাকগুলি অক্ষম থাকলে সিস্টেমটি ব্যাক জেসচার পরিচালনা করে। ব্যাক-টু-হোম, ক্রস-অ্যাক্টিভিটি এবং ক্রস-টাস্কের মতো সিস্টেম অ্যানিমেশনগুলি ট্রিগার করার জন্য, supportFragmentManager এর ব্যাক স্ট্যাকটি খালি থাকতে হবে যাতে এর অভ্যন্তরীণ কলব্যাক অক্ষম থাকে।
ভবিষ্যদ্বাণীমূলক ব্যাক জেসচার অ্যানিমেশন পরীক্ষা করুন
আপনি যদি এখনও অ্যান্ড্রয়েড ১৩ বা অ্যান্ড্রয়েড ১৪ ব্যবহার করেন, তাহলে আপনি চিত্র ১-এ দেখানো ব্যাক-টু-হোম অ্যানিমেশনটি পরীক্ষা করতে পারেন।
এই অ্যানিমেশনটি পরীক্ষা করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
আপনার ডিভাইসে, সেটিংস > সিস্টেম > ডেভেলপার অপশন এ যান।
প্রেডিক্টিভ ব্যাক অ্যানিমেশন নির্বাচন করুন।
আপনার আপডেট করা অ্যাপটি চালু করুন এবং এটি কীভাবে কাজ করছে তা দেখতে পিছনের অঙ্গভঙ্গি ব্যবহার করুন।