يتضمّن Hilt إضافات لتوفير صفوف من مكتبات Jetpack الأخرى. يتوافق Hilt حاليًا مع مكونات Jetpack التالية:
ViewModel
- التنقّل
- إنشاء
- مدير العمل
ويجب إضافة تبعيات Hilt للاستفادة من عمليات الدمج هذه. لمزيد من المعلومات حول إضافة التبعيات، يُرجى الاطّلاع على إدخال التبعية باستخدام Hilt.
إدخال كائنات ViewModel باستخدام Hilt
يمكنك توفير ViewModel
من خلال إضافة تعليق توضيحي إليه باستخدام @HiltViewModel
واستخدام التعليق التوضيحي @Inject
في الدالة الإنشائية لكائن ViewModel
.
Kotlin
@HiltViewModel class ExampleViewModel @Inject constructor( private val savedStateHandle: SavedStateHandle, private val repository: ExampleRepository ) : ViewModel() { ... }
Java
@HiltViewModel public class ExampleViewModel extends ViewModel { private final ExampleRepository repository; private final SavedStateHandle savedStateHandle; @Inject ExampleViewModel( SavedStateHandle savedStateHandle, ExampleRepository repository) { this.savedStateHandle = savedStateHandle; this.repository = repository; } ... }
بعد ذلك، يمكن لأي نشاط أو جزء تمت إضافة تعليقات توضيحية إليه باستخدام @AndroidEntryPoint
الحصول على مثيل ViewModel
كالمعتاد باستخدام ViewModelProvider
أو
by viewModels()
إضافات KTX:
Kotlin
@AndroidEntryPoint class ExampleActivity : AppCompatActivity() { private val exampleViewModel: ExampleViewModel by viewModels() ... }
Java
@AndroidEntryPoint public class ExampleActivity extends AppCompatActivity { private ExampleViewModel exampleViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); exampleViewModel = new ViewModelProvider(this).get(ExampleViewModel.class); } ... }
@ViewModelScoped
يتم توفير جميع نماذج Hilt ViewModels من خلال ViewModelComponent
التي تتّبع دورة حياة ViewModel
نفسها، وبالتالي يمكنها الصمود في التغييرات التي تطرأ على الإعدادات.
لتحديد نطاق التبعية إلى ViewModel
، استخدِم التعليق التوضيحي @ViewModelScoped
.
يجعل النوع @ViewModelScoped
متوافقًا بحيث يتم توفير مثيل واحد من النوع
النطاق عبر جميع التبعيات التي تم إدخالها في ViewModel
.
ستتلقى الحالات الأخرى من ViewModel التي تطلب مثيل النطاق مثيلاً مختلفًا.
إذا كان هناك حاجة إلى مشاركة مثيل واحد على مستوى نماذج عرض مختلفة، يجب تحديد نطاقه باستخدام @ActivityRetainedScoped
أو @Singleton
.
التكامل مع مكتبة التنقّل في Jetpack
أضف التبعيات الإضافية التالية إلى ملف Gradle:
رائع
dependencies { ... implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0' }
Kotlin
dependencies { ... implementation("androidx.hilt:hilt-navigation-fragment:1.0.0") }
إذا كان ViewModel
محدّدًا للرسم البياني للتنقل، استخدِم الدالة hiltNavGraphViewModels
التي تعمل مع الأجزاء التي لها تعليقات توضيحية @AndroidEntryPoint
.
Kotlin
val viewModel: ExampleViewModel by hiltNavGraphViewModels(R.id.my_graph)
Java
NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.my_graph); ExampleViewModel exampleViewModel = new ViewModelProvider( backStackEntry, HiltViewModelFactory.create(context, backStackEntry) ).get(ExampleViewModel.class)
التكامل مع Jetpack Compose
لمعرفة كيفية تكامل Hilt مع تطبيق Jetpack Compose، يمكنك الاطّلاع على قسم Hilt في الكتابة والمكتبات الأخرى.
إدخال WorkManager باستخدام Hilt
أضف التبعيات الإضافية التالية إلى ملف Gradle. لاحظ أنه بالإضافة إلى المكتبة، تحتاج إلى تضمين معالج تعليقات توضيحية إضافي يعمل أعلى معالج التعليقات التوضيحية Hilt:
رائع
dependencies { ... implementation 'androidx.hilt:hilt-work:1.0.0' // When using Kotlin. kapt 'androidx.hilt:hilt-compiler:1.0.0' // When using Java. annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0' }
Kotlin
dependencies { implementation("androidx.hilt:hilt-work:1.0.0") // When using Kotlin. kapt("androidx.hilt:hilt-compiler:1.0.0") // When using Java. annotationProcessor("androidx.hilt:hilt-compiler:1.0.0") }
أدخِل Worker
باستخدام التعليق التوضيحي
@HiltWorker
في الفئة و@AssistedInject
في الدالة الإنشائية لكائن Worker
. يمكنك استخدام عمليات الربط @Singleton
أو عمليات الربط غير محدَّدة النطاق فقط في عناصر Worker
. يجب أيضًا إضافة تعليق توضيحي إلى تبعيات Context
وWorkerParameters
باستخدام @Assisted
:
Kotlin
@HiltWorker class ExampleWorker @AssistedInject constructor( @Assisted appContext: Context, @Assisted workerParams: WorkerParameters, workerDependency: WorkerDependency ) : Worker(appContext, workerParams) { ... }
Java
@HiltWorker public class ExampleWorker extends Worker { private final WorkerDependency workerDependency; @AssistedInject ExampleWorker( @Assisted @NonNull Context context, @Assisted @NonNull WorkerParameters params, WorkerDependency workerDependency ) { super(context, params); this.workerDependency = workerDependency; } ... }
بعد ذلك، اطلب من فئة Application
تنفيذ واجهة Configuration.Provider
، وإدخال مثيل لـ HiltWorkFactory
، وتمريره إلى إعدادات WorkManager
على النحو التالي:
Kotlin
@HiltAndroidApp class ExampleApplication : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory override fun getWorkManagerConfiguration() = Configuration.Builder() .setWorkerFactory(workerFactory) .build() }
Java
@HiltAndroidApp public class ExampleApplication extends Application implements Configuration.Provider { @Inject HiltWorkerFactory workerFactory; @Override public Configuration getWorkManagerConfiguration() { return new Configuration.Builder() .setWorkerFactory(workerFactory) .build(); } }