ViewModel là một trong những thứ tốt nhất trong Android Jetpack để cho phép logic di chuyển khỏi Activity .
Tuy nhiên, có một điểm bất lợi lớn mà ViewModel có, không dễ dàng đưa các phụ thuộc vào nó khi đã đưa nó vào Activity. Tôi khám phá nhiều cách theo bài viết này , và không có cách nào trong số đó là lý tưởng.
Rất may bây giờ với Dagger Hilt , điều này được thực hiện nhiều hơn nữa.
Giả sử tôi phải Hoạt động với ViewModel của nó. Có ba điều mà Activity cần chuyển đến View Model
private val viewModel: MyViewModel by viewModels{
MyViewModelFactory(this, Repository(),
intent.extras)
}
class MyViewModelFactory(
owner: SavedStateRegistryOwner,
private val repository: Repository,
defaultArgs: Bundle? = null
) : AbstractSavedStateViewModelFactory(owner, defaultArgs) {
override fun <T : ViewModel> create(
key: String, modelClass: Class<T>, handle: SavedStateHandle
): T {
return MyViewModel(
repository, handle
) as T
}
}
Dagger Hilt đặc biệt là một Dagger đơn giản dành cho Android. Việc thiết lập tương đối đơn giản. Kiểm tra bên dưới để thiết lập ban đầu.
Dagger Hilt: Thậm chí còn ngắn hơn và dễ dàng hơn!Sau khi bạn đã thiết lập Dagger Hilt cho Dự án của mình, bây giờ chúng tôi có thể làm việc trên ViewModel injection.
Để sử dụng @HiltViewModel, bạn cần thêm 2 thư viện này lên trên Dagger Hilt Libraries đã thêm như đã chia sẻ ở bài viết trên.
implementation "androidx.hilt:hilt-lifecycle-viewmodel
:1.0.0-alpha03"
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha03'
@HiltViewModel
class MyViewModel @Inject constructor(
private val repository: Repository,
private val savedStateHandle: SavedStateHandle
) : ViewModel(), LifecycleObserver {
class MyViewModel @ViewModelInject constructor(
private val repository: Repository,
@Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel(), LifecycleObserver {
Với điều này tại chỗ, bạn không cần bất kỳ ViewModelFactory nào nữa! Tất cả đã được thực hiện cho bạn! Trong hoạt động của bạn, bây giờ bạn có thể sử dụng KTX viewModels()trực tiếp.
private val viewModel: MyViewModel by viewModels()
Tôi đã tạo một thiết kế làm việc mẫu ở đây . Được cung cấp bên dưới để so sánh đơn giản nhanh chóng
@ViewModelInjectvà Dagger Hilt.
Nếu bạn thấy điều này hữu ích, bài viết dưới đây cũng có thể hữu ích.
Chuyển dữ liệu ý định hoạt động sang ViewModel thông qua InjectionHướng dẫn từng bước để di chuyển từ Dagger sang Hilt trong một dự án đa mô-đun. Cấu trúc dự án Để trực quan hóa dự án, nó chứa nhiều mô-đun NetworkModule, StorageModule, CommonModule, FeatureModule, v.v.
Trong hướng dẫn toàn diện này, chúng ta sẽ khám phá các kỹ năng thiết yếu cần có cho các nhà phát triển iOS mới vào nghề. Từ các ngôn ngữ lập trình như Swift và Objective-C đến cộng tác và giao tiếp, chúng tôi sẽ đề cập đến mọi thứ mà một nhà phát triển iOS mới vào nghề cần biết để thành công trong thị trường cạnh tranh ngày nay.
Nếu chúng ta muốn tiếp tục phát triển trên hành tinh này, chúng ta sẽ phải có những cuộc đối thoại nguy hiểm. Những thứ thách thức những gì chúng ta đã làm, những gì chúng ta đang làm và những gì chúng ta hiện đang chuẩn bị tiếp tục làm (hoặc đang có kế hoạch làm).
“Này Siri, chơi Me Dive của Olivia Dean.” Đó là tháng 5 năm 2021 khi tôi bắt đầu thực tập tại Học viện Tương lai Châu Phi ở Akure, Nigeria.
Trong thế giới kết nối ngày nay, mối đe dọa tấn công mạng phổ biến hơn bao giờ hết. Tội phạm mạng và các tác nhân quốc gia liên tục tìm cách khai thác các lỗ hổng và đánh cắp dữ liệu có giá trị, gây rủi ro đáng kể cho các tổ chức thuộc mọi quy mô.
Khi bạn lớn lên, bạn có xu hướng được bảo rằng thế giới là như vậy và cuộc sống của bạn chỉ là sống cuộc sống của bạn trong thế giới, không bao giờ mạo hiểm cuộc sống của bạn, chỉ cần đi theo một con đường đã định sẵn và cuối cùng sẽ chết, và cố gắng không bash the wall too much.But that's a very limited life.