تتضمّن 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
توفّر "ViewModelComponent
" جميع نماذج Hilt ViewModels التي تلي
دورة الحياة نفسها مثل ViewModel
، وبالتالي يمكنها البقاء على قيد الحياة عند إجراء تغييرات في الإعدادات.
لتحديد نطاق التبعية إلى ViewModel
، استخدِم التعليق التوضيحي @ViewModelScoped
.
سيُجري نوع @ViewModelScoped
ذلك بحيث يكون مثيل واحد لنطاق النطاق
نوع البيانات على مستوى جميع الاعتماديات التي تم إدخالها في ViewModel
.
ستتلقَّى الحالات الأخرى من ViewModel التي تطلب المثيل ذي النطاق
مثيل مختلف.
وإذا كانت هناك حاجة لمشاركة مثيل واحد عبر نماذج ViewModels المختلفة،
يجب تحديد نطاقه باستخدام @ActivityRetainedScoped
أو @Singleton
.
الدمج مع مكتبة التنقّل في Jetpack
أضف التبعيات الإضافية التالية إلى ملف Gradle:
Groovy
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:
Groovy
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(); } }