
প্রেডিক্টিভ ব্যাক, একটি জেসচার নেভিগেশন ফিচার, ব্যবহারকারীদেরকে আগে থেকেই দেখে নিতে দেয় যে ব্যাক সোয়াইপ করলে তারা কোথায় যাবেন।
উদাহরণস্বরূপ, ব্যাক জেসচার ব্যবহার করে আপনার অ্যাপের পিছনে হোম স্ক্রিনের একটি অ্যানিমেটেড প্রিভিউ প্রদর্শন করা যেতে পারে, যেমনটি চিত্র ১-এর মকআপে দেখানো হয়েছে।
অ্যান্ড্রয়েড ১৫ থেকে, প্রেডিক্টিভ ব্যাক অ্যানিমেশনের জন্য ডেভেলপার অপশনটি আর উপলব্ধ নেই। এখন থেকে, ব্যাক-টু-হোম, ক্রস-টাস্ক এবং ক্রস-অ্যাক্টিভিটির মতো সিস্টেম অ্যানিমেশনগুলো সেইসব অ্যাপের জন্য দেখা যাবে, যারা সম্পূর্ণভাবে অথবা অ্যাক্টিভিটি লেভেলে প্রেডিক্টিভ ব্যাক জেসচারটি বেছে নিয়েছে।
আপনি এই হোমপেজে ফিরে যাওয়ার অ্যানিমেশনটি পরীক্ষা করতে পারেন (যেমনটি এই পৃষ্ঠার পরবর্তী একটি অংশে বর্ণনা করা হয়েছে)।
প্রিডিক্টিভ ব্যাক জেসচার সমর্থন করার জন্য আপনার অ্যাপ আপডেট করতে হবে, অথবা AndroidX Activity 1.6.0 বা তার উচ্চতর সংস্করণে থাকা ব্যাকওয়ার্ড কম্প্যাটিবল OnBackPressedCallback 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 ব্যবহার করতে, নিশ্চিত করুন যে আপনার অ্যাপে androidx.activity:activity-compose ডিপেন্ডেন্সিটি (সংস্করণ 1.8.0 বা তার বেশি) অন্তর্ভুক্ত আছে:
// In your build.gradle.kts file:
dependencies {
implementation("androidx.activity:activity-compose:1.8.0")
}
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 বা তার উচ্চতর সংস্করণে আপগ্রেড করুন।
কাস্টম ব্যাক নেভিগেশন ব্যবহার করে এমন একটি অ্যাপ আপডেট করুন
আপনার অ্যাপে যদি কাস্টম ব্যাক বিহেভিয়ার প্রয়োগ করা থাকে, তবে সেটি AndroidX ব্যবহার করে কিনা এবং ব্যাক নেভিগেশন কীভাবে পরিচালনা করে, তার উপর নির্ভর করে মাইগ্রেশনের বিভিন্ন পথ রয়েছে।
| আপনার অ্যাপ কীভাবে ব্যাক নেভিগেশন পরিচালনা করে | প্রস্তাবিত মাইগ্রেশন পথ (এই পৃষ্ঠায় লিঙ্ক দেওয়া আছে) |
| অ্যান্ড্রয়েডএক্স এপিআই | বিদ্যমান AndroidX ব্যাক ইমপ্লিমেন্টেশন মাইগ্রেট করুন |
| অসমর্থিত প্ল্যাটফর্ম এপিআই | অসমর্থিত ব্যাক নেভিগেশন এপিআই সম্বলিত একটি AndroidX অ্যাপকে AndroidX এপিআই-তে মাইগ্রেট করুন |
একটি AndroidX ব্যাক নেভিগেশন বাস্তবায়ন স্থানান্তর করুন
এই ব্যবহারের ক্ষেত্রটি সবচেয়ে সাধারণ (এবং সবচেয়ে প্রস্তাবিত)। এটি নতুন বা বিদ্যমান সেইসব অ্যাপের ক্ষেত্রে প্রযোজ্য, যেগুলো ‘কাস্টম ব্যাক নেভিগেশন প্রদান করুন’ অংশে বর্ণিত OnBackPressedDispatcher ব্যবহার করে কাস্টম জেসচার নেভিগেশন হ্যান্ডলিং প্রয়োগ করে।
যেসব এপিআই ইতিমধ্যেই OnBackPressedDispatcher ব্যবহার করছে (যেমন ফ্র্যাগমেন্ট এবং নেভিগেশন কম্পোনেন্ট), সেগুলো যেন প্রেডিক্টিভ ব্যাক জেসচারের সাথে নির্বিঘ্নে কাজ করে, তা নিশ্চিত করতে AndroidX Activity 1.6.0 বা উচ্চতর সংস্করণে আপগ্রেড করুন।
// In your build.gradle file:
dependencies {
// Add this in addition to your other dependencies
implementation "androidx.activity:activity:1.6.0"
}
অসমর্থিত ব্যাক নেভিগেশন এপিআই সম্বলিত একটি 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 বা উচ্চতর সংস্করণে আপগ্রেড করতে ভুলবেন না।
// In your build.gradle file: dependencies { // Add this in addition to your other dependencies implementation "androidx.activity:activity:1.6.0" }
ভবিষ্যদ্বাণীমূলক ব্যাক থেকে অপ্ট আউট করুন
এটি বন্ধ করতে, 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 সক্রিয় করে, তাহলে প্রেডিক্টিভ ব্যাক অ্যানিমেশনগুলো চলে না এবং আপনাকে অবশ্যই ব্যাক ইভেন্টটি হ্যান্ডেল করতে হবে। বিজনেস লজিক চালানোর জন্য বা লগ করার জন্য এই কলব্যাকগুলো তৈরি করবেন না।
ব্যবহারকারী যখন পিছনে সোয়াইপ করেন তখন আপনার অ্যাপকে যদি বিজনেস লজিক চালাতে বা লগ করতে হয়, তাহলে নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করুন:
- Compose-এর ক্ষেত্রে: Compose ডেস্টিনেশনের সাথে যুক্ত একটি
ViewModelএরonCleared()কলব্যাকের মধ্যে লগ করুন। কখন একটি Compose ডেস্টিনেশন ব্যাক স্ট্যাক থেকে পপ হয়ে ডেস্ট্রয় হয়ে যায়, তা জানার জন্য এটিই সর্বোত্তম সংকেত। - অ্যান্ড্রয়েড ১৬ এবং তার পরবর্তী সংস্করণগুলিতে:
PRIORITY_SYSTEM_NAVIGATION_OBSERVERসহOnBackInvokedCallbackব্যবহার করুন। এটি এমন একটি অবজারভার কলব্যাক তৈরি করে যা ব্যাক ইভেন্টটি গ্রহণ করে না। উদাহরণস্বরূপ, যখন ব্যবহারকারী রুট অ্যাক্টিভিটি থেকে পিছনে সোয়াইপ করে (আপনার অ্যাপ ছেড়ে যায়), তখন ব্যাক ইভেন্টটি লগ করতে বা বিজনেস লজিক চালানোর জন্য আপনি এই কলব্যাকটি রেজিস্টার করতে পারেন, এবং একই সাথে ব্যাক-টু-হোম অ্যানিমেশনটিও চলতে দিতে পারেন। - ভিউ-ভিত্তিক অ্যাপে: ব্যাক ইভেন্ট ব্যবহার না করে লাইফসাইকেল বা ব্যাক স্ট্যাক কলব্যাকের মধ্যে লগ করুন:
- অ্যাক্টিভিটি ট্রানজিশনের ক্ষেত্রে,
Activity.onDestroy()-এর মধ্যেisFinishingtrueকিনা তা যাচাই করুন। - ফ্র্যাগমেন্ট ট্রানজিশনের জন্য, ফ্র্যাগমেন্টের ভিউ লাইফসাইকেলের
onDestroy()ফাংশনের মধ্যেisRemovingtrueকিনা তা পরীক্ষা করুন, অথবাFragmentManager.OnBackStackChangedListener(onBackStackChangeStarted/onBackStackChangeCommitted) ব্যবহার করুন।
- অ্যাক্টিভিটি ট্রানজিশনের ক্ষেত্রে,
একক দায়িত্বের কলব্যাক তৈরি করুন
আপনি ডিসপ্যাচারে একাধিক কলব্যাক যোগ করতে পারেন। কলব্যাকগুলো একটি স্ট্যাকে যুক্ত হয়, যেখানে সর্বশেষ যুক্ত হওয়া সক্রিয় কলব্যাকটি পরবর্তী ব্যাক জেসচারটি পরিচালনা করে এবং প্রতিটি ব্যাক জেসচারের জন্য একটি করে কলব্যাক থাকে।
কোনো কলব্যাকের সক্রিয় অবস্থা পরিচালনা করা সহজ হয়, যদি সেই কলব্যাকটির একটিমাত্র দায়িত্ব থাকে। উদাহরণস্বরূপ:

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