অন্যান্য জেটপ্যাক লাইব্রেরির সাথে হিল্ট ব্যবহার করুন

হিল্টে অন্যান্য জেটপ্যাক লাইব্রেরি থেকে ক্লাস প্রদানের জন্য এক্সটেনশন অন্তর্ভুক্ত। হিল্ট বর্তমানে নিম্নলিখিত জেটপ্যাক উপাদানগুলিকে সমর্থন করে:

  • ViewModel
  • নেভিগেশন
  • রচনা করা
  • ওয়ার্ক ম্যানেজার

এই একীকরণের সুবিধা নিতে আপনাকে অবশ্যই হিল্ট নির্ভরতা যোগ করতে হবে। নির্ভরতা যোগ করার বিষয়ে আরও তথ্যের জন্য, হিল্টের সাথে নির্ভরতা ইনজেকশন দেখুন।

হিল্ট দিয়ে ভিউমডেল অবজেক্ট ইনজেক্ট করুন

@HiltViewModel এর সাথে টীকা দিয়ে এবং ViewModel অবজেক্টের কনস্ট্রাক্টরে @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 এর সাথে টীকা করা একটি কার্যকলাপ বা একটি খণ্ডটি ViewModelProvider বা by viewModels() KTX এক্সটেনশনগুলি ব্যবহার করে স্বাভাবিক হিসাবে ViewModel উদাহরণ পেতে পারে:

কোটলিন

@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

সমস্ত Hilt ViewModels ViewModelComponent দ্বারা সরবরাহ করা হয় যা একটি ViewModel মতো একই জীবনচক্র অনুসরণ করে, এবং যেমন, কনফিগারেশন পরিবর্তনগুলি থেকে বাঁচতে পারে। একটি ViewModel উপর নির্ভরতা বাড়াতে @ViewModelScoped টীকা ব্যবহার করুন।

একটি @ViewModelScoped প্রকার এটি তৈরি করবে যাতে ViewModel এ ইনজেকশন করা সমস্ত নির্ভরতা জুড়ে স্কোপড টাইপের একটি একক উদাহরণ প্রদান করা হয়। একটি ViewModel এর অন্যান্য উদাহরণ যা স্কোপড উদাহরণের জন্য অনুরোধ করে একটি ভিন্ন উদাহরণ পাবে।

যদি একটি একক দৃষ্টান্ত বিভিন্ন ভিউমডেল জুড়ে ভাগ করা প্রয়োজন, তাহলে এটি @ActivityRetainedScoped বা @Singleton ব্যবহার করে স্কোপ করা উচিত।

জেটপ্যাক নেভিগেশন লাইব্রেরির সাথে ইন্টিগ্রেশন

আপনার 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)

জেটপ্যাক কম্পোজের সাথে ইন্টিগ্রেশন

হিল্ট কীভাবে জেটপ্যাক কম্পোজের সাথে একীভূত হয় তা দেখতে, কম্পোজ এবং অন্যান্য লাইব্রেরির হিল্ট বিভাগটি দেখুন।

হিল্ট দিয়ে ওয়ার্ক ম্যানেজার ইনজেক্ট করুন

আপনার Gradle ফাইলে নিম্নলিখিত অতিরিক্ত নির্ভরতা যোগ করুন। মনে রাখবেন যে লাইব্রেরি ছাড়াও, আপনাকে একটি অতিরিক্ত টীকা প্রসেসর অন্তর্ভুক্ত করতে হবে যা হিল্ট টীকা প্রসেসরের উপরে কাজ করে:

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")
}

ক্লাসে @HiltWorker টীকা ব্যবহার করে একজন Worker ইনজেক্ট করুন এবং Worker অবজেক্টের কনস্ট্রাক্টরে @AssistedInject । আপনি Worker অবজেক্টে শুধুমাত্র @Singleton বা unscoped bindings ব্যবহার করতে পারেন। আপনাকে অবশ্যই @Assisted এর সাথে Context এবং WorkerParameters নির্ভরতা টীকা করতে হবে:

কোটলিন

@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();
  }
}