অ্যান্ড্রয়েডএক্স পর্ব ২ঃ এক্টিভিটি
এই ব্লগের ইংরেজি ভার্শন পড়তে ভিজিট করুনঃ 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
হিসেবে আছে SavedStateViewModelFactory
। viewModel
এর ব্লগে আমরা এই 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 দিন এবং আসন্ন ব্লগগুলির জন্য চ্যানেলটি অনুসরণ করুন।
হ্যাপি কোডিং।