AndroidX লাইব্রেরিতে আর্কিটেকচার কম্পোনেন্ট অন্তর্ভুক্ত থাকে, যা আপনি মজবুত, টেস্ট করা যায় এবং রক্ষণাবেক্ষণ করা যায় এমন অ্যাপ ডিজাইন করতে ব্যবহার করতে পারেন। ডেটা বাইন্ডিং লাইব্রেরি আর্কিটেকচার কম্পোনেন্টের সাথে নির্বিঘ্নে কাজ করে যাতে আপনার UI-এর ডেভেলপমেন্ট আরও সহজ করা যায়। আপনার অ্যাপের লেআউট আর্কিটেকচার কম্পোনেন্টের ডেটার সাথে বাইন্ড করতে পারে, যা আপনাকে UI কন্ট্রোলারের লাইফসাইকেল ম্যানেজ করতে এবং ডেটার পরিবর্তন সম্পর্কে UI-কে জানাতে সাহায্য করে।
এই পৃষ্ঠাটি দেখায় যে কীভাবে আপনার অ্যাপে আর্কিটেকচার কম্পোনেন্ট অন্তর্ভুক্ত করতে হয় যাতে ডেটা বাইন্ডিং লাইব্রেরি ব্যবহার করে সবচেয়ে বেশি সুবিধা পাওয়া যায়।
ডেটা পরিবর্তন সম্পর্কে UI-কে জানাতে LiveData ব্যবহার করুন
ডেটাতে হওয়া পরিবর্তন সম্পর্কে UI-কে অটোমেটিক বিজ্ঞপ্তি পাঠাতে, আপনি ডেটা বাইন্ডিং সোর্স হিসেবে
LiveData অবজেক্ট ব্যবহার করতে
পারেন। এই আর্কিটেকচার কম্পোনেন্ট সম্পর্কে আরও তথ্যের জন্য, LiveData
ওভারভিউ দেখুন।
Observable—যেমন
পর্যবেক্ষণযোগ্য
ফিল্ড—LiveData
অবজেক্ট ডেটা পরিবর্তনের জন্য সাবস্ক্রাইব করা পর্যবেক্ষকদের লাইফসাইকেল সম্পর্কে জানে। এই জ্ঞান অনেক সুবিধা প্রদান করে, যা LiveData
ব্যবহার করার
সুবিধা-তে ব্যাখ্যা করা হয়েছে।
Android Studio ভার্সন ৩.১ এবং তার পরবর্তী ভার্সনে, আপনার ডেটা বাইন্ডিং কোডে
LiveData অবজেক্টের মাধ্যমে পর্যবেক্ষণযোগ্য ফিল্ড পরিবর্তন করতে পারবেন।
আপনার বাইন্ডিং ক্লাসের সাথে LiveData অবজেক্ট ব্যবহার করতে, আপনাকে LiveData অবজেক্টের স্কোপ নির্ধারণ করার জন্য
লাইফসাইকেল মালিক নির্দিষ্ট করতে হবে। নিম্নলিখিত
উদাহরণটি বাইন্ডিং ক্লাস ইনস্ট্যান্টিয়েট করার পরে অ্যাক্টিভিটিকে লাইফসাইকেল মালিক হিসেবে
নির্দিষ্ট করে:
Kotlin
class ViewModelActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { // Inflate view and obtain an instance of the binding class. val binding: UserBinding = DataBindingUtil.setContentView(this, R.layout.user) // Specify the current activity as the lifecycle owner. binding.setLifecycleOwner(this) } }
জাভা
class ViewModelActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { // Inflate view and obtain an instance of the binding class. UserBinding binding = DataBindingUtil.setContentView(this, R.layout.user); // Specify the current activity as the lifecycle owner. binding.setLifecycleOwner(this); } }
আপনি একটি ViewModel
কম্পোনেন্ট ব্যবহার করতে পারেন, যেমনটি নিম্নলিখিত বিভাগে ব্যাখ্যা করা হয়েছে, লেআউটে ডেটা বাইন্ড করার জন্য। ViewModel কম্পোনেন্টে,
ডেটা ট্রান্সফর্ম করতে বা একাধিক ডেটা সোর্স মার্জ করতে,
আপনি LiveData অবজেক্ট ব্যবহার করতে পারবেন। ViewModel-এ ডেটা কীভাবে ট্রান্সফর্ম করতে হয় তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
Kotlin
class ScheduleViewModel : ViewModel() { val userName: LiveDatainit { val result = Repository.userName userName = Transformations.map(result) { result -> result.value } } }
জাভা
class ScheduleViewModel extends ViewModel { LiveDatausername; public ScheduleViewModel() { String result = Repository.userName; userName = Transformations.map(result, result -> result.value); } }
UI-সম্পর্কিত ডেটা ম্যানেজ করতে ViewModel ব্যবহার করুন
ডেটা বাইন্ডিং লাইব্রেরি
ViewModel কম্পোনেন্টের সাথে নির্বিঘ্নে কাজ করে। ViewModel
লেআউট যে ডেটা পর্যবেক্ষণ করে তা প্রকাশ করে এবং এর পরিবর্তনের সাথে সাথে প্রতিক্রিয়া জানায়। ডেটা বাইন্ডিং লাইব্রেরির সাথে
ViewModel কম্পোনেন্ট ব্যবহার করলে আপনি লেআউট থেকে UI লজিক সরিয়ে কম্পোনেন্টে নিয়ে যেতে পারবেন, যা টেস্ট করা আরও সহজ। ডেটা বাইন্ডিং লাইব্রেরি নিশ্চিত করে যে ভিউগুলি ডেটা সোর্স থেকে প্রয়োজন অনুযায়ী বাউন্ড এবং আনবাউন্ড করা হয়েছে। বাকি কাজের বেশিরভাগ অংশই হল, আপনি সঠিক ডেটা দেখাচ্ছেন কিনা তা নিশ্চিত করা। এই আর্কিটেকচার কম্পোনেন্ট সম্পর্কে আরও জানতে, ViewModel
ওভারভিউ দেখুন।
ডেটা বাইন্ডিং লাইব্রেরির সাথে ViewModel কম্পোনেন্ট ব্যবহার করতে, আপনাকে
অবশ্যই আপনার কম্পোনেন্ট ইনস্ট্যান্টিয়েট করতে হবে—যা
ViewModel ক্লাস থেকে ইনহেরিট করে, আপনার বাইন্ডিং ক্লাসের একটি
ইনস্ট্যান্স পান এবং বাইন্ডিং ক্লাসের একটি
প্রপার্টিতে আপনার ViewModel কম্পোনেন্ট অ্যাসাইন করুন। লাইব্রেরির সাথে কীভাবে
কম্পোনেন্ট ব্যবহার করতে হয় তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
Kotlin
class ViewModelActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { // Obtain the ViewModel component. val userModel: UserModel by viewModels() // Inflate view and obtain an instance of the binding class. val binding: UserBinding = DataBindingUtil.setContentView(this, R.layout.user) // Assign the component to a property in the binding class. binding.viewmodel = userModel } }
জাভা
class ViewModelActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { // Obtain the ViewModel component. UserModel userModel = new ViewModelProvider(this).get(UserModel.class); // Inflate view and obtain an instance of the binding class. UserBinding binding = DataBindingUtil.setContentView(this, R.layout.user); // Assign the component to a property in the binding class. binding.viewmodel = userModel; } }
আপনার লেআউটে, বাইন্ডিং এক্সপ্রেশন ব্যবহার করে সংশ্লিষ্ট ভিউতে আপনার ViewModel কম্পোনেন্টের
প্রপার্টি ও মেথড অ্যাসাইন করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
<CheckBox
android:id="@+id/rememberMeCheckBox"
android:checked="@{viewmodel.rememberMe}"
android:onCheckedChanged="@{() -> viewmodel.rememberMeChanged()}" />
বাইন্ডিং অ্যাডাপ্টারের উপর আরও বেশি নিয়ন্ত্রণ পেতে Observable ViewModel ব্যবহার করুন
আপনি একটি ViewModel
কম্পোনেন্ট ব্যবহার করতে পারেন যা
Observable ইন্টারফেস
বাস্তবায়ন করে
অন্যান্য অ্যাপ কম্পোনেন্টকে ডেটার পরিবর্তন সম্পর্কে জানাতে, ঠিক যেভাবে আপনি একটি
LiveData অবজেক্ট ব্যবহার করবেন।
এমন পরিস্থিতি হতে পারে যেখানে আপনি LiveData অবজেক্ট ব্যবহার করার পরিবর্তে
ViewModel কম্পোনেন্ট ব্যবহার করতে পছন্দ করতে পারেন যা Observable
ইন্টারফেস প্রয়োগ করে, এমনকি আপনি LiveData-এর লাইফসাইকেল
ম্যানেজমেন্ট ক্ষমতা হারালেও। ViewModel কম্পোনেন্ট ব্যবহার করে
Observable প্রয়োগ করলে আপনার অ্যাপে বাইন্ডিং অ্যাডাপ্টারের উপর আরও নিয়ন্ত্রণ পাবেন। যেমন, এই প্যাটার্ন ডেটা পরিবর্তন হলে বিজ্ঞপ্তিগুলির উপর আরও নিয়ন্ত্রণ দেয়; এটি আপনাকে টু-ওয়ে ডেটা বাইন্ডিংয়ে অ্যাট্রিবিউটের মান সেট করার জন্য একটি কাস্টম পদ্ধতি নির্দিষ্ট করতে দেয়।
পর্যবেক্ষণযোগ্য ViewModel কম্পোনেন্ট প্রয়োগ করতে, আপনাকে অবশ্যই এমন একটি ক্লাস তৈরি করতে হবে যা
ViewModel ক্লাস থেকে ইনহেরিট করে এবং Observable
ইন্টারফেস প্রয়োগ করে। addOnPropertyChangedCallback()
এবং
removeOnPropertyChangedCallback()
পদ্ধতি ব্যবহার করে কোনও পর্যবেক্ষক বিজ্ঞপ্তিতে সাবস্ক্রাইব বা আনসাবস্ক্রাইব করলে আপনি কাস্টম লজিক প্রদান করতে পারেন। এছাড়াও, আপনি কাস্টম লজিক প্রদান করতে পারেন যা
notifyPropertyChanged()
পদ্ধতিতে প্রপার্টি পরিবর্তন হলে রান করে। নিম্নলিখিত কোডের উদাহরণ থেকে বোঝা যাবে যে কীভাবে পর্যবেক্ষণযোগ্য
ViewModel প্রয়োগ করতে হয়:
Kotlin
/** * A ViewModel that is also an Observable, * to be used with the Data Binding Library. */ open class ObservableViewModel : ViewModel(), Observable { private val callbacks: PropertyChangeRegistry = PropertyChangeRegistry() override fun addOnPropertyChangedCallback( callback: Observable.OnPropertyChangedCallback) { callbacks.add(callback) } override fun removeOnPropertyChangedCallback( callback: Observable.OnPropertyChangedCallback) { callbacks.remove(callback) } /** * Notifies observers that all properties of this instance have changed. */ fun notifyChange() { callbacks.notifyCallbacks(this, 0, null) } /** * Notifies observers that a specific property has changed. The getter for the * property that changes must be marked with the @Bindable annotation to * generate a field in the BR class to be used as the fieldId parameter. * * @param fieldId The generated BR id for the Bindable field. */ fun notifyPropertyChanged(fieldId: Int) { callbacks.notifyCallbacks(this, fieldId, null) } }
জাভা
/** * A ViewModel that is also an Observable, * to be used with the Data Binding Library. */ class ObservableViewModel extends ViewModel implements Observable { private PropertyChangeRegistry callbacks = new PropertyChangeRegistry(); @Override protected void addOnPropertyChangedCallback( Observable.OnPropertyChangedCallback callback) { callbacks.add(callback); } @Override protected void removeOnPropertyChangedCallback( Observable.OnPropertyChangedCallback callback) { callbacks.remove(callback); } /** * Notifies observers that all properties of this instance have changed. */ void notifyChange() { callbacks.notifyCallbacks(this, 0, null); } /** * Notifies observers that a specific property has changed. The getter for the * property that changes must be marked with the @Bindable annotation to * generate a field in the BR class to be used as the fieldId parameter. * * @param fieldId The generated BR id for the Bindable field. */ void notifyPropertyChanged(int fieldId) { callbacks.notifyCallbacks(this, fieldId, null); } }
অতিরিক্ত রিসোর্স
ডেটা বাইন্ডিং সম্পর্কে আরও জানতে, নিম্নলিখিত অতিরিক্ত রিসোর্স দেখুন।
আপনার জন্য সাজেস্ট করা হয়েছে
- মনে রাখবেন: জাভাস্ক্রিপ্ট বন্ধ থাকলে লিঙ্ক টেক্সট দেখানো হয়
- পর্যবেক্ষণযোগ্য ডেটা অবজেক্ট নিয়ে কাজ করা
- পৃষ্ঠা অনুযায়ী ডেটা লোড ও ডিসপ্লে করা
- লাইফসাইকেল-অ্যাওয়ার কম্পোনেন্টের সাথে Kotlin কোরুটিন ব্যবহার করা