
প্রেডিক্টিভ ব্যাক, একটি জেসচার নেভিগেশন ফিচার, ব্যবহারকারীদেরকে আগে থেকেই দেখে নিতে দেয় যে ব্যাক সোয়াইপ করলে তারা কোথায় যাবেন।
উদাহরণস্বরূপ, ব্যাক জেসচার ব্যবহার করে আপনার অ্যাপের পিছনে হোম স্ক্রিনের একটি অ্যানিমেটেড প্রিভিউ প্রদর্শন করা যেতে পারে, যেমনটি চিত্র ১-এর মকআপে দেখানো হয়েছে।
অ্যান্ড্রয়েড ১৫ থেকে, প্রেডিক্টিভ ব্যাক অ্যানিমেশনের জন্য ডেভেলপার অপশনটি আর উপলব্ধ নেই। এখন থেকে, ব্যাক-টু-হোম, ক্রস-টাস্ক এবং ক্রস-অ্যাক্টিভিটির মতো সিস্টেম অ্যানিমেশনগুলো সেইসব অ্যাপের জন্য দেখা যাবে, যারা সম্পূর্ণভাবে অথবা অ্যাক্টিভিটি লেভেলে প্রেডিক্টিভ ব্যাক জেসচারটি বেছে নিয়েছে।
আপনি এই হোমপেজে ফিরে যাওয়ার অ্যানিমেশনটি পরীক্ষা করতে পারেন (যেমনটি এই পৃষ্ঠার পরবর্তী একটি অংশে বর্ণনা করা হয়েছে)।
প্রিডিক্টিভ ব্যাক জেসচার সমর্থন করার জন্য আপনার অ্যাপ আপডেট করতে হবে, অথবা ব্যাকওয়ার্ড কম্প্যাটিবল OnBackPressedCallback AppCompat 1.6.0-alpha05 (AndroidX) বা উচ্চতর API, কিংবা নতুন OnBackInvokedCallback প্ল্যাটফর্ম API ব্যবহার করতে হবে। বেশিরভাগ অ্যাপই ব্যাকওয়ার্ড কম্প্যাটিবল AndroidX API ব্যবহার করে।
এই আপডেটটি ব্যাক নেভিগেশনকে সঠিকভাবে ইন্টারসেপ্ট করার জন্য একটি মাইগ্রেশন পথ প্রদান করে, যার মধ্যে KeyEvent.KEYCODE_BACK এবং Activity ও Dialog এর মতো onBackPressed মেথডযুক্ত যেকোনো ক্লাস থেকে ব্যাক ইন্টারসেপশনগুলোকে নতুন সিস্টেম ব্যাক এপিআই (API) দ্বারা প্রতিস্থাপন করা অন্তর্ভুক্ত।
কোডল্যাব এবং গুগল আই/ও ভিডিও
এই পৃষ্ঠার ডকুমেন্টেশন ব্যবহার করার পাশাপাশি, আমাদের কোডল্যাবটিও ব্যবহার করে দেখুন । এটি AndroidX Activity API ব্যবহার করে প্রেডিক্টিভ ব্যাক জেসচার পরিচালনা করার জন্য একটি WebView-এর সাধারণ ব্যবহারের একটি বাস্তবায়ন প্রদান করে।
এছাড়াও আপনি আমাদের Google I/O ভিডিওটি দেখতে পারেন, যেখানে AndroidX এবং প্ল্যাটফর্ম API বাস্তবায়নের আরও উদাহরণ তুলে ধরা হয়েছে।
কম্পোজে কাস্টম ব্যাক জেসচার পরিচালনা করুন
কাস্টম ব্যাক জেসচার হ্যান্ডেল করার জন্য Compose, 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 ব্যবহার করুন।
ডিফল্ট ব্যাক নেভিগেশন ব্যবহার করে এমন একটি অ্যাপ আপডেট করুন।
প্রেডিক্টিভ ব্যাক ডিফল্টরূপে সক্রিয় থাকে।
আপনার অ্যাপে যদি ফ্র্যাগমেন্ট বা নেভিগেশন কম্পোনেন্ট ব্যবহার করা হয়, তাহলে AndroidX Activity 1.6.0-alpha05 বা তার উচ্চতর সংস্করণে আপগ্রেড করুন।
কাস্টম ব্যাক নেভিগেশন ব্যবহার করে এমন একটি অ্যাপ আপডেট করুন
আপনার অ্যাপে যদি কাস্টম ব্যাক বিহেভিয়ার প্রয়োগ করা থাকে, তবে সেটি AndroidX ব্যবহার করে কিনা এবং ব্যাক নেভিগেশন কীভাবে পরিচালনা করে, তার উপর নির্ভর করে মাইগ্রেশনের বিভিন্ন পথ রয়েছে।
| আপনার অ্যাপ কীভাবে ব্যাক নেভিগেশন পরিচালনা করে | প্রস্তাবিত মাইগ্রেশন পথ (এই পৃষ্ঠায় লিঙ্ক দেওয়া আছে) |
| অ্যান্ড্রয়েডএক্স এপিআই | বিদ্যমান AndroidX ব্যাক ইমপ্লিমেন্টেশন মাইগ্রেট করুন |
| অসমর্থিত প্ল্যাটফর্ম এপিআই | অসমর্থিত ব্যাক নেভিগেশন এপিআই সম্বলিত একটি AndroidX অ্যাপকে AndroidX এপিআই-তে মাইগ্রেট করুন |
একটি AndroidX ব্যাক নেভিগেশন বাস্তবায়ন স্থানান্তর করুন
এই ব্যবহারের ক্ষেত্রটি সবচেয়ে সাধারণ (এবং সবচেয়ে প্রস্তাবিত)। এটি নতুন বা বিদ্যমান সেইসব অ্যাপের ক্ষেত্রে প্রযোজ্য, যেগুলো ‘কাস্টম ব্যাক নেভিগেশন প্রদান করুন’ অংশে বর্ণিত OnBackPressedDispatcher ব্যবহার করে কাস্টম জেসচার নেভিগেশন হ্যান্ডলিং প্রয়োগ করে।
যেসব এপিআই ইতিমধ্যেই 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"
```
অসমর্থিত ব্যাক নেভিগেশন এপিআই সম্বলিত একটি AndroidX অ্যাপকে AndroidX এপিআই-তে মাইগ্রেট করুন
যদি আপনার অ্যাপ AndroidX লাইব্রেরি ব্যবহার করে কিন্তু অসমর্থিত ব্যাক নেভিগেশন API প্রয়োগ করে বা সেগুলোর উল্লেখ করে, তাহলে নতুন আচরণটি সমর্থন করার জন্য আপনাকে AndroidX API ব্যবহার শুরু করতে হবে।
অসমর্থিত API-গুলিকে AndroidX API-তে স্থানান্তরিত করতে:
OnBackPressedCallbackএর একটি ইমপ্লিমেন্টেশন ব্যবহার করে আপনার সিস্টেমের ব্যাক হ্যান্ডলিং লজিককে AndroidX-এরOnBackPressedDispatcherএ স্থানান্তর করুন। বিস্তারিত নির্দেশনার জন্য, "Provide custom back navigation" দেখুন।ব্যাক জেসচার ইন্টারসেপ্ট করা বন্ধ করতে প্রস্তুত হলে
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>
এটিকে false সেট করলে নিম্নলিখিত ঘটনা ঘটে:
- প্রিডিক্টিভ ব্যাক জেসচার সিস্টেম অ্যানিমেশন নিষ্ক্রিয় করে।
-
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-কে কল করে, যা অ্যান্ড্রয়েড ১৩-এর আগে অসমর্থিত ছিল। - অ্যাপ লেভেলে
enableOnBackInvokedCallbackফ্ল্যাগটি সেট করলে অ্যাপের সমস্ত অ্যাক্টিভিটির জন্য ডিফল্ট মান নির্ধারিত হয়। পূর্ববর্তী কোড উদাহরণে দেখানো অনুযায়ী, অ্যাক্টিভিটি লেভেলে ফ্ল্যাগটি সেট করে আপনি প্রতিটি অ্যাক্টিভিটির জন্য এই ডিফল্ট মানটি ওভাররাইড করতে পারেন।
কলব্যাকের সর্বোত্তম অনুশীলন
সমর্থিত সিস্টেম ব্যাক কলব্যাকগুলো— PredictiveBackHandler বা BackHandler (Compose-এর জন্য), OnBackPressedCallback , অথবা OnBackInvokedCallback ব্যবহার করার সেরা পদ্ধতিগুলো নিচে দেওয়া হলো।
প্রতিটি কলব্যাক সক্ষম এবং অক্ষম করে এমন UI অবস্থা নির্ধারণ করুন।
UI state হলো এমন একটি প্রপার্টি যা UI-কে বর্ণনা করে। আমরা এই প্রধান ধাপগুলো অনুসরণ করার পরামর্শ দিই।
প্রতিটি কলব্যাককে সক্ষম ও অক্ষম করে এমন UI অবস্থা নির্ধারণ করুন।
StateFlowবা Compose State-এর মতো একটি অবজার্ভেবল ডেটা হোল্ডার টাইপ ব্যবহার করে সেই স্টেটটি সংজ্ঞায়িত করুন এবং স্টেট পরিবর্তনের সাথে সাথে কলব্যাকটি সক্রিয় বা নিষ্ক্রিয় করুন।
যদি আপনার অ্যাপ আগে কন্ডিশনাল স্টেটমেন্টের সাথে ব্যাক লজিক যুক্ত করে থাকে, তাহলে এর মানে হতে পারে যে আপনি ব্যাক ইভেন্টটি ঘটে যাওয়ার পরেই সেটির প্রতিক্রিয়া জানাচ্ছেন। নতুন কলব্যাকগুলোর ক্ষেত্রে এই প্যাটার্নটি পরিহার করুন। সম্ভব হলে, কলব্যাকটিকে কন্ডিশনাল স্টেটমেন্টের বাইরে নিয়ে যান এবং এর পরিবর্তে এটিকে একটি অবজার্ভেবল ডেটা হোল্ডার টাইপের সাথে যুক্ত করুন।
UI লজিকের জন্য সিস্টেম ব্যাক কলব্যাক ব্যবহার করুন
UI লজিক নির্ধারণ করে UI কীভাবে প্রদর্শিত হবে। UI লজিক কার্যকর করতে, যেমন একটি ডায়ালগ প্রদর্শন করা বা একটি অ্যানিমেশন চালানো, সিস্টেম ব্যাক কলব্যাক ব্যবহার করুন।
যদি আপনার অ্যাপ PRIORITY_DEFAULT বা PRIORITY_OVERLAY সহ একটি OnBackPressedCallback বা OnBackInvokedCallback সক্রিয় করে, তাহলে প্রেডিক্টিভ ব্যাক অ্যানিমেশনগুলো চলে না এবং আপনাকে অবশ্যই ব্যাক ইভেন্টটি হ্যান্ডেল করতে হবে। বিজনেস লজিক চালানোর জন্য বা লগ করার জন্য এই কলব্যাকগুলো তৈরি করবেন না।
ব্যবহারকারী যখন পিছনে সোয়াইপ করেন তখন আপনার অ্যাপকে যদি বিজনেস লজিক চালাতে বা লগ করতে হয়, তাহলে নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করুন:
- Android 16 এবং তার পরবর্তী সংস্করণ চালিত ডিভাইসগুলিতে
PRIORITY_SYSTEM_NAVIGATION_OBSERVERএর সাথেOnBackInvokedCallbackব্যবহার করুন। এটি এমন একটি অবজারভার-কলব্যাক তৈরি করে যা ব্যাক ইভেন্টটি গ্রহণ করে না। উদাহরণস্বরূপ, ব্যবহারকারী যখন রুট অ্যাক্টিভিটি থেকে পিছনে সোয়াইপ করেন, বা অন্য কথায়, যখন ব্যবহারকারী আপনার অ্যাপ ছেড়ে চলে যান, তখন আপনি এই কলব্যাকটি রেজিস্টার করতে পারেন। এই ক্ষেত্রে, আপনি ব্যাক ইভেন্টটি লগ করতে বা অন্যান্য বিজনেস লজিক চালাতে পারেন, এবং ব্যাক-টু-হোম অ্যানিমেশনটিও চলতে থাকবে। - অ্যাক্টিভিটি-টু-অ্যাক্টিভিটি বা ফ্র্যাগমেন্ট-টু-অ্যাক্টিভিটি ক্ষেত্রে, অ্যাক্টিভিটি লাইফসাইকেলের মধ্যে
onDestroyisFinishingtrueহলে তা লগ করুন। - এক ফ্র্যাগমেন্ট থেকে অন্য ফ্র্যাগমেন্টে স্থানান্তরের ক্ষেত্রে, ফ্র্যাগমেন্টের ভিউ লাইফসাইকেলে
onDestroyএর ভেতরেরisRemovingtrue হলে লগ করুন। অথবাFragmentManager.OnBackStackChangedListenerভেতরেonBackStackChangeStartedবাonBackStackChangeCommittedমেথড ব্যবহার করে লগ করুন। - Compose-এর ক্ষেত্রে, Compose ডেস্টিনেশনের সাথে যুক্ত
ViewModelএরonCleared()কলব্যাকে লগ করুন। কখন একটি Compose ডেস্টিনেশন ব্যাক স্ট্যাক থেকে পপ হয়ে ডেস্ট্রয় হয়ে যায়, তা জানার জন্য এটিই সর্বোত্তম সংকেত।
একক দায়িত্বের কলব্যাক তৈরি করুন
আপনি ডিসপ্যাচারে একাধিক কলব্যাক যোগ করতে পারেন। কলব্যাকগুলো একটি স্ট্যাকে যুক্ত হয়, যেখানে সর্বশেষ যুক্ত হওয়া সক্রিয় কলব্যাকটি পরবর্তী ব্যাক জেসচারটি পরিচালনা করে এবং প্রতিটি ব্যাক জেসচারের জন্য একটি করে কলব্যাক থাকে।
কোনো কলব্যাকের সক্রিয় অবস্থা পরিচালনা করা সহজ হয়, যদি সেই কলব্যাকটির একটিমাত্র দায়িত্ব থাকে। উদাহরণস্বরূপ:

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