Middle+
Kaip įdiegti ViewModel naudojant Dagger Hilt?
sobes.tech AI
Atsakymas iš AI
Naudojant @HiltViewModel anotaciją pačioje ViewModel ir @ActivityRetainedScoped arba @ViewModelScoped anotacijas priklausomybėms, kurios turi gyvuoti tiek pat ilgai kaip ir ViewModel arba aktyvumas. Priklausomybės injekuojamos per konstruktorių su @Inject anotacija.
// ViewModel apibrėžimas
@HiltViewModel
class MyViewModel @Inject constructor(
private val myRepository: MyRepository // Priklausomybės injekcija per konstruktorių
) : ViewModel() {
// ViewModel logika
}
// Priklausomybės (Repository) deklaravimas
@ActivityRetainedScoped // Pavyzdinis srities pavyzdys
class MyRepository @Inject constructor() {
// Saugyklos logika
}
Activity arba Fragment, ViewModel gaunamas naudojant viewModels() arba activityViewModels() delegatus:
// Activity
@AndroidEntryPoint // Anotacija Hilt komponentams
class MyActivity : AppCompatActivity() {
private val viewModel: MyViewModel by viewModels() // Gauti ViewModel naudojant delegatą
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Naudojimas viewModel
}
}
// Fragment
@AndroidEntryPoint // Anotacija Hilt komponentams
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModels() // Gauti ViewModel šiam fragmentui
// arba
// private val activityViewModel: MyViewModel by activityViewModels() // Gauti aktyvumo susietą ViewModel
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Naudojimas viewModel
}
}
Reikalingos priklausomybės (pavyzdžiui, moduliai, teikiantys MyRepository) turi būti sukonfigūruotos Hilt moduliuose.
// Hilt modulės pavyzdys
@Module
@InstallIn(SingletonComponent::class) // Modulis įdiegtas SingletonComponent
object RepositoryModule {
@Provides
@Singleton // Sritis singletonui
fun provideMyRepository(): MyRepository {
return MyRepository() // Teikia MyRepository egzempliorių
}
}