تتضمّن Hilt إضافات لتقديم صفوف من مكتبات Jetpack الأخرى. تتوافق Hilt حاليًا مع مكوّنات Jetpack التالية:
ViewModel
- التنقّل
- إنشاء
- مدير العمل
يجب إضافة تبعيات Hilt للاستفادة من عمليات الدمج هذه. بالنسبة لمزيد من المعلومات حول إضافة التبعيات، راجع إدخال التبعية مع Hilt.
إدخال كائنات ViewModel باستخدام Hilt
يمكنك تقديم ViewModel
من خلال إضافة تعليقات توضيحية.
مع @HiltViewModel
واستخدام التعليق التوضيحي @Inject
في ViewModel
الدالة الإنشائية للكائن.
@HiltViewModel
class ExampleViewModel @Inject constructor(
private val savedStateHandle: SavedStateHandle,
private val repository: ExampleRepository
) : ViewModel() {
...
}
@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:
@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
private val exampleViewModel: ExampleViewModel by viewModels()
...
}
@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:
app/build.gradle
dependencies {
...
implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0'
}
dependencies {
...
implementation("androidx.hilt:hilt-navigation-fragment:1.0.0")
}
إذا كان ViewModel
على مستوى التنقل
الرسم البياني،
تستخدم الدالة hiltNavGraphViewModels
التي تعمل مع الأجزاء
تمت إضافة تعليقات توضيحية إليه باستخدام @AndroidEntryPoint
.
val viewModel: ExampleViewModel by hiltNavGraphViewModels(R.id.my_graph)
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:
app/build.gradle
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'
}
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
:
@HiltWorker
class ExampleWorker @AssistedInject constructor(
@Assisted appContext: Context,
@Assisted workerParams: WorkerParameters,
workerDependency: WorkerDependency
) : Worker(appContext, workerParams) { ... }
@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
على النحو التالي:
@HiltAndroidApp
class ExampleApplication : Application(), Configuration.Provider {
@Inject lateinit var workerFactory: HiltWorkerFactory
override fun getWorkManagerConfiguration() =
Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
@HiltAndroidApp
public class ExampleApplication extends Application implements Configuration.Provider {
@Inject HiltWorkerFactory workerFactory;
@Override
public Configuration getWorkManagerConfiguration() {
return new Configuration.Builder()
.setWorkerFactory(workerFactory)
.build();
}
}