অ্যান্ড্রয়েডএক্স পর্ব ২ঃ এক্টিভিটি

S M Mohi-Us Sunnat
sunnat629.dev
Published in
3 min readMar 9, 2020

এই ব্লগের ইংরেজি ভার্শন পড়তে ভিজিট করুনঃ AndroidX Part 2: Activity

ভার্সনঃ Version 1.2.0-alpha01

আজ আমরা দেখব অ্যান্ড্রয়েডএক্স এর এক্টিভিটি তে নতুন কি কি এসেছে।

প্রথমেই আমাদের gradle dependency তে

আমরা অ্যান্ড্রয়েডএক্স পর্ব ১ঃ অ্যাপ-কমপ্যাক্ট-এ দেখে ছিলাম যে আমরা এখন setContentView() এর বিকল্প হিসেবে AppCompatActivity এর প্যারামিটার হিসেবে লেআউট ব্যবহার করতে পারি। যা androidx.activity:activity এর একটি অংশ। এটি মূলত হচ্ছে @ContentView এনোটেশন ক্লাস এর জন্য। এই নতুন এনোটেশন ক্লাস যোগ করা হয়েছে activity#1.0.0-alpha04 ভার্ষনে।

এটি আপনাকে XML লেয়াউট কে setContentView() এর বিকল্পে ব্যবহার করতে অনুমতি দেয়। আপনি যদি AppCompatActivity(R.layout.activity_main) চেক করেন, তাহলে দেখবেন যে AppCompatActivity() একটি @ContentView এনোটেড কস্ট্রাক্টর।

LifecycleOwner এবং ViewModelStoreOwner এখন FragmentActivity থেকে ComponentActivity তে বাস্তবায়ন করা হয়েছে। আমরা Lifecycle পর্বে এ নিয়ে আরেকটু বিস্তারিত দেখব, ইন শা আল্লাহ্‌।

MVVM (Model View ViewModel) আর্কিটেকচার এ এখন আমরা Lifecycle ViewModel SavedState ইন্ট্রীগেট করতে পারি খুব সহজে।

এখন আমরা প্রায় সবাই নিন্মের কোডের মত viewModel ইনিশিয়ালাইজ করি।

কিন্তু এখন androidx.activity এর সুবিধার্থে খুব সহজেই এই কাজ টি করতে পারি। এখন আর আমাদের ViewModelProvider এর দরকার হবে না। আমরা by viewModels() ব্যবহার করে সরাসরি viewModel ইনিসিয়েট করতে পারি -

আমরা যদি খেয়াল করে দেখি, এখানে আমরা by ব্যবহার করেছি। এর মানে এটি একটি lazy ইন্সট্যান্স। অর্থাৎ এই viewModel তখনই ইনিসিয়ালাইজ হবে যখন এর কোন ব্যবহার আসবে। এতে মেমরি লিক থেকে আমরা মুক্ত পেতে পারি। কোন একদিন lazy নিয়ে একটি ব্লগ লিখব। আর যদি viewModels() এ ঢুকে দেখি, তাহলে আমরা দেখব যে এটি একটি ComponentActivity এর এক্সটেনশন ফাঙ্কশন।

যার প্যারামিটার হিসেবে আছে Factory, আর এর ডিফল্ট factory হিসেবে আছে SavedStateViewModelFactoryviewModel এর ব্লগে আমরা এই Factory নিয়ে কিছু জানব। এই by viewModels(), ComponentActivity ও এর সাব-ক্লাসে বিদ্যমান। মানে আমরা Fragment এও এভাবে viewModel ইনিসিয়েট করতে পারব।

এই viewModel এর lifecycle এর জন্য ২টি আলাদা লাইব্রেরীর উপর নির্ভরশিল Lifecycle 2.2.0-rc03 এবং Lifecycle ViewModel SavedState 1.0.0-rc03, যার ব্যবহার Lifecycle এর ব্লগে দেখব।

androidx.activity:activity এর শেষ ভার্ষন এর মধ্যে আমার ব্লগের শেষ নতুন ফিচারের মধ্যে রয়েছে OnBackPressedCallback। এটি সাধারণত OnBackPressed এর কলব্যাক।

Activity এ ব্যবহৃত এক বা একাধিক Fragment এর OnBackPressed ইভেন্ট গুলো হ্যাল্ডেল করার জন্য এই কলব্যাক খুবই সহজ হবে।

androidx.drawerlayout.widget.DrawerLayout এর একটি উদাহরণ দেখি যেখানে onBackPressed() এ আমরা drawerLayout ড্রয়ার ওপেন-ক্লোজ হ্যান্ডেল করব -

এখানে আমরা এখানে এক জায়গাতেই if-else মাধ্যমে লজিক হ্যান্ডেল করছি, কিন্তু আমরা OnBackPressedCallback এর মাধ্যমে খুব সহজেই DrawerLayout হ্যান্ডেল করা যায়।

নেভিগেশন ভিউ ডিসমিস করার জন্য এখন আমরা OnBackPressedCallback ব্যবহার করা যায়, আর এর জন্য এক্টিভিটি onBackPressedDispatcher এ রেজিস্টার করে।

এই কন্ডিশনাল লজিক, OnBackPressedCallback-এর enable বা disable হ্যান্ডেল করা যাবে।

উপরের উদাহরণে আমরা দেখতে পাচ্ছি যে আমরা একটা callback ইনিশিয়ালাইজ করছি, যা একটি OnBackPressedCallback এর অবজেক্ট। OnBackPressedCallback এর একটি একটি abstract ক্লাস handleOnBackPressed আছে, যেখানে আমরা onBackPressed() এর কাজটি করতে পারছি।

এটি কেবল একটি সাধারণ উদাহরণ ছিল তবে, একাধিক Fragment দের খুব সহজেই OnBackPressedCallback এর মাধ্যমে কন্ট্রোল করা যায়।

আজ এ পর্যন্তই।

Activity এর চেঞ্জলগ দেখতেঃ লিঙ্ক

আমরা পরবর্তি ব্লগে androidx.fragment নিয়ে দেখব।

যদি এই ব্লগে আপনার কোন উপকারে আসে, তবে আমাকে সমর্থন করতে clap দিন এবং আসন্ন ব্লগগুলির জন্য চ্যানেলটি অনুসরণ করুন।

হ্যাপি কোডিং।

--

--