带有注射刀柄的视图模型中的屏幕旋转问题

时间:2021-04-18 20:48:26

标签: android android-jetpack android-viewmodel screen-rotation dagger-hilt

我在将匕首注入视图模型时遇到问题。问题是旋转屏幕时丢失表单输入。问题是我的注入还是初始化我的视图模型?这是我的视图模型;

@HiltViewModel
class ProfilIslemViewModel @Inject constructor(application: Application,
                                           private val kullaniciService: KullaniciService,
                                           private val kullaniciDao:KullaniciDao
): AndroidViewModel(application), CoroutineScope {...}

这是我使用这个视图模型的片段;

@AndroidEntryPoint
class ProfilIslemFragment:Fragment(), ProfilIslemFragmentClickListener {

private val viewModel: ProfilIslemViewModel by viewModels();
...
}

这里是注入类的模块;

@Module
@InstallIn(SingletonComponent::class)
object KutuphanemAppModule {

@Singleton
@Provides
fun provideKutuphanemDatabase
            (@ApplicationContext context:Context) = Room.databaseBuilder(
    context,
    KutuphanemDatabase::class.java,
    KUTUPHANEM_DB_NAME
).build();

@Singleton
@Provides
fun provideRetrofit(client: OkHttpClient):Retrofit =
    Retrofit.Builder()
        .baseUrl(API_URL)
        .addConverterFactory(ScalarsConverterFactory.create())
        .addConverterFactory(GsonConverterFactory.create())
        .client(client)
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .build();

@Singleton
@Provides
fun provideHttpClient(customSharedPreferences: CustomSharedPreferences):OkHttpClient{
    return OkHttpClient.Builder().addInterceptor(object:Interceptor{
        override fun intercept(chain: Interceptor.Chain): Response {
            val request:Request = chain.request().newBuilder().addHeader("Authorization",
                "Bearer "+customSharedPreferences.getStringFromSharedPreferences(APP_TOKEN_KEY).trim()).build();
            return chain.proceed(request);
        }
    }).build();
}

@Singleton
@Provides
fun provideParametreDao(database: KutuphanemDatabase) = database.getParametreDao();

@Singleton
@Provides
fun provideParametreApi(retrofit: Retrofit):IParametreService = retrofit.create(IParametreService::class.java);

@Singleton
@Provides
fun provideKullaniciApi(retrofit: Retrofit):KullaniciService = retrofit.create(KullaniciService::class.java);

@Singleton
@Provides
fun provideKitapApi(retrofit: Retrofit):IKitapService = retrofit.create(IKitapService::class.java);

@Singleton
@Provides
fun provideKullaniciDao(database: KutuphanemDatabase) = database.getKullaniciDao();

}

当我旋转屏幕时,输入丢失了。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我发现了错误。它与我的视图模型或注入无关。它是由双向数据绑定引起的。但即便如此,我还是将这一行放入了 viewmodel 的构造函数中;

 private val savedStateHandle: SavedStateHandle

我用这个参数控制状态。所以我的输入不会丢失。